PHP Категории (Дерево категорий). PHP Категории (Дерево категорий) #2 Список категорий и их описание

  • Дата: 22.03.2023

В данной статье (уровень веб-мастера - продвинутый) речь пойдёт о, пересекающейся по разным признакам, т.н. "фасетной" навигации. Для упрощения усвоения материала рекомендую пробежаться по статье в Википедии "Фасетная классификация " и публикации на английском языке (но с картинками!) "Design better faceted navigation for your websites ".

Фасетная навигация с фильтрацией по цвету или ценовому диапазону может быть полезна для ваших посетителей, но зачастую вредит в поиске из-за того, что создаёт множество комбинаций адресов с дублирующимся контентом . Из-за дублей поисковые системы не смогут быстро сканировать сайт на предмет обновлений контента, что соответственно влияет и на индексацию. Чтобы минимизировать эту проблему и помочь веб-мастерам сделать фасетную навигацию дружелюбной в отношении поиска, мы бы хотели:

Идеально для пользователей и поиска Google

Чёткий путь к продуктам/страницам статьи:

Представление URL для страницы категории:
http://www.example.com/category.php?category=gummy-candies

Представление URL для конкретного продукта:
http://www.example.com/product.php?item=swedish-fish

Нежелательные дубликаты, вызванные фасетной навигацией

Одна и та же страница доступна с различных веб-адресов:

Каноническая страница



URL: example.com/product.php? item=swedish-fish

Дублированная страница



URL:example.com/product.php? item=swedish-fish&category=gummy-candies&price=5-10


category=gummy-candies&taste=sour&price=5-10

Ошибки:

  • Бессмысленно для Google, так как пользователи редко ищут [мармелад по цене 9:55 долларов].
  • Бессмысленно для поисковых роботов, которые обнаружат один и тот же элемент ("фруктовый салат") от родительских страниц категорий (либо "Жевательный мармелад" или "кислый Жевательный мармелад").
  • Отрицательный момент для владельца сайта, потому запросы на индексацию разбавляются многочисленными версиями одной и той же категории.
  • Отрицательный момент для владельца сайта, потому что это бесполезная и лишняя нагрузка в пропускной способности сайта
Пустые страницы:


URL: example.com/category.php? category=gummy-candies&taste=sour&price=over-10

Ошибки:

  • Неправильно отдаётся код для поисковых систем (в таком случае страница должна отдавать код 404)
  • Пустая страница для пользователей


Наихудшие решения (не дружелюбные в отношении поиска) фасетной навигации

Пример №1 : В составе URL применяются не стандартные параметры: запятые и скобки, вместо ключ=значение& :

  • example.com/category? [ category:gummy-candy ][ sort:price-low-to-high ][ sid:789 ]
  • example.com/category?category , gummy-candy , sort , lowtohigh , sid , 789
Как надо:
example.com/category?category=gummy-candy&sort=low-to-high&sid=789

Пример №2 : Использование каталогов или путей к файлам, а не параметров в списках значений, которые не изменяют содержание страницы:
example.com/c123 /s789/ product?swedish-fish
(где /c123/ категория, /s789/ ID сессии, что не изменяет содержимое страницы)

Хорошее решение:

  • example.com /gummy-candy/ product?item=swedish-fish&sid=789 (каталог, /gummy-candy/, меняет содержимое страницы в значимым образом)
Лучшее решение:
  • example.com/product?item=swedish-fish&category=gummy-candy&sid=789 (параметры URL дают большую гибкость для поисковых систем, чтобы определить, как эффективно сканировать)
Поисковым роботам трудно дифференцировать полезные значения (например, "gummy-candy") от бесполезных (например, "SESSIONID"), когда эти значения помещаются непосредственно в пути ссылки. С другой стороны, параметры URL обеспечивают гибкость для поисковых систем, чтобы быстро проверить и определить, когда данное значение не требует доступ сканирующего робота (краулера) ко всем всем вариантам.

Общие значения, которые не меняют содержимое страницы и должны быть перечислены в качестве параметров URL, включают:

  • ID сессии
  • Отслеживание идентификаторов
  • Referrer идентификаторы
  • Отметки времени
Пример №3 : Преобразование созданных пользователями значений (возможно бесконечных) в параметры URL, которые доступны для сканирования и индексирования, но бесполезны для поиска.
Использование незначительных данных, генерируемых пользователями сайта (например, как долгота/широта или "дней назад"), в сканируемых и индексируемых адресах:
  • example.com/find-a-doctor? radius=15&latitude=40.7565068&longitude=-73.9668408
  • example.com/article?category=health& days-ago=7
Как надо:
  • example.com/find-a-doctor?city=san-francisco&neighborhood=soma
  • example.com/articles?category=health&date=january-10-2014
Вместо того, чтобы позволить пользователем генерировать значения для создания сканируемых URL-адресов (что приводит к бесконечным возможностям с очень небольшой ценностью для посетителей), лучше публиковать категорию страницы для наиболее популярных значений, вдобавок можно включать дополнительную информацию, чтобы страница представляла большую ценность, чем обычная поисковая cтраница с результатами. Кроме того, можно подумать о размещении сгенерированных пользователем значениях в отдельном каталоге, а затем через robots.txt запретить сканирование из этого каталога.
  • example.com/filtering/ find-a-doctor?radius=15&latitude=40.7565068&longitude=-73.9668408
  • example.com/filtering/ articles?category=health&days-ago=7
И в robots.txt:
User-agent: *
Disallow: /filtering/

Пример №4 . Добавление параметров URL без логики.

  • example.com/gummy-candy/lollipops/gummy-candy/ gummy-candy/product?swedish-fish
  • example.com/product?cat=gummy-candy&cat=lollipops&cat=gummy-candy &cat=gummy-candy&item=swedish-fish
Хорошее решение:
  • example.com /gummy-candy/ product?item=swedish-fish
Лучшее решение:
  • example.com/product?item=swedish-fish&category=gummy-candy
Посторонние параметры URL только увеличивают дублирование, в результате сайт менее эффективно сканируется и индексируется. Поэтому необходимо избавляться от ненужных параметров URL и периодически заниматься уборкой мусорных ссылок перед генерацией новых URL. Если многие параметры необходимы для пользовательского сеанса, можно скрыть информацию в куки, а не постоянно добавлять значения, как cat=gummy-candy&cat=lollipops&cat=gummy-candy& ...

Пример №5 : Предлагать дальнейшие уточнения (фильтрация), когда есть нулевые результаты.

Плохо:
Разрешать пользователям выбрать фильтры, когда существуют нулевые элементы для уточнения.


Уточнение к странице с нулевыми результатами (например, price=over-10), что расстраивает пользователей и вызывает ненужные запросы для поисковых систем.

Как надо:
Создавать ссылки только тогда, когда есть элементы для выбора пользователем. При нулевом результате ссылку помечать "серой" (т.е. недоступной для клика). Для дальнейшего улучшения юзабилити рассмотреть вопрос о включении показателя количества доступных элементов рядом с каждым фильтром.


Вывод страницы с нулевыми результатами (например, price=over-10) не допускается, плюс запрещается пользователям делать ненужные клики, а поисковым система сканировать эту не полезную страницу.

Необходимо предотвращать появление ненужных адресов и минимизировать пространство для посетителя, создавая URL только при наличии продукции. Это поможет пользователям оставаться занятыми на вашем сайте (меньше кликов по кнопке назад, когда не находится ни одного товара), уменьшит число возможных URL, известных поисковым системам. Кроме того, если страница не просто "временно нет в наличии", а вряд ли когда-нибудь будет содержать релевантную информацию, стоит рассмотреть возможность сделать для неё код ответа 404 . На 404-ой странице вы можете оформить полезное сообщение для пользователей с большим количеством опций в навигации или окно поиска, чтобы пользователи могли найти родственные продукты.

Для новых сайтов, веб-мастера которых рассматривают внедрение фасетной навигации, есть несколько вариантов оптимизации сканирования (совокупность адресов на вашем сайте, известных роботу Google) уникальных страниц контента и уменьшения попадания в индекс поисковой системы дублирующихся страниц (консолидация сигналов индексации).

Определите, какие параметры URL требуются для поисковых систем, чтобы сканировать каждую индивидуальный страницу с контентом (то есть, определить, какие параметры необходимы для создания, по меньшей мере одного клик-пути к каждому пункту). Обязательные параметры могут включать в себя item-id , category-id , page т.д.

Определите, какие параметры будут полезны для посетителей с их запросами, и какие скорее всего только вызовут дублирование при сканировании и индексировании. В примере с кондитерскими товарами (мармелад) параметр URL "taste " может быть ценным для пользователей с запросами в примере taste=sour . Тем не менее, логично посчитать параметр "price" вызывающим лишнее дублирование category=gummy-candies&taste=sour&price=over-10 . Другие распространенные примеры:

  • Ценные параметры для поисковиков: item-id , category-id , name , brand ...
  • Ненужные параметры: session-id , price-range ...
Рассмотрим реализацию одного из нескольких вариантов конфигурации для URL-адресов, которые содержат ненужные параметры. Просто убедитесь, что "ненужные" параметры URL действительно не требуются для сканирования поисковым роботам или для нахождения пользователем каждого отдельного продукта!

Вариант 1: и внутренние ссылки

Пометьте все ненужные URL-адреса атрибутом . Это уменьшит трудозатраты поискового робота и предотвратит снижение частоты сканирования. Глобально управлять сканированием нужно через robots.txt (Примеч. переводчика: см. статью " ").
Воспользуйтесь атрибутом rel="canonical", чтобы отделить страницы для поискового индекса от страниц, не нужных там (например на странице price=5-10 можно прописать атрибут rel="canonical", указывающий на категорию всего кислого мармелада example.com/category.php?category=gummy-candies&taste=sour& page=all ).

Вариант 2: Robots.txt и Disallow

URL-ы с ненужными параметрами включают в директорию /filtering/ , которая будет закрыта в robots.txt (запрет disallow). Это даст всем поисковым системам сканировать только "правильное" внутриссылочное (содержимое) сайта, но будет блокировать разом сканирование нежелательных URL. Например (example.com/category.php?category=gummy-candies ), если ценными параметрами были item, category и taste, и лишними были идентификатор сеанса и price, то URL будет для taste таким:
example.com/category.php?category=gummy-candies&taste=sour , но все ненужные параметры, такие как price, URL включит в предопределенный каталог - /filtering/:
example.com/filtering/ category.php?category=gummy-candies&price=5-10 ,
который затем через robots.txt будет запрещен:
User-agent: *
Disallow: /filtering/

Вариант 3: Раздельные хосты

Убедитесь, что лучшие решения, перечисленные выше (например, для ненужных адресов) все еще применяются. В противном случае поисковые системы уже сформировали большую ссылочную массу в индексе. Таким образом, ваша работа будет направлена ​​на снижение дальнейшего роста ненужных страниц, просмотренных с помощью робота Google и консолидацию сигналов индексации.

Используйте параметры со стандартной кодировкой и форматом ключ=значение (key=value).

Убедитесь, что значения, которые не меняют содержимое страницы, такие как идентификаторы сеансов, реализованы в виде ключ=значение, а не каталогов.

Не позволяйте кликать и не генерируйте URL-адреса, когда не существует элементов для фильтра.

Добавьте логику в отображение параметров URL: удалите ненужные параметры, а не добавляйте постоянно значения (например, избегайте такой генерации ссылки: example.com/product?cat=gummy-candy&cat=lollipops &cat=gummy-candy&item=swedish-fish ).

Сохраняйте ценные параметры в URL, перечислив их в первую (так как URL видны в результатах поиска) очередь и менее уместные параметры в последнюю (например, идентификатор сессии).
Избегайте подобной структуры ссылок: example.com/category.php?session-id=123&tracking-id=456 &category=gummy-candies&taste=sour
Настройте параметры URL в Инструментах для веб-мастеров, если имеете чёткое представление о работе ссылок на вашем сайте.

Убедитесь, что при использовании JavaScript для динамического управления контентом (sort/filter/hide) без обновления URL, есть реальные веб-адреса на вашем сайте, имеющие ценность в поиске, например, это основные категории и страницы продуктов, которые доступны для сканирования и индексирования. Старайтесь не использовать только домашнюю страницу (т.е. один URL) для всего вашего сайта, а через JavaScript динамически изменять контент навигацией - это, к сожалению, выдаст в поиске пользователям только один URL. Кроме того, проверьте, чтобы производительность не повлияла на работу динамической фильтрации в худшую сторону, так как помешает пользователю работать с сайтом.

Улучшите индексацию различных страниц одного контента указанием атрибута rel="canonical" на привилегированную версию страницы. Атрибут rel="canonical" может быть использован внутри одного и нескольких доменов.

Оптимизируйте индексацию контента, разбитого на страницы "паджинации" (например, page=1 и page=2 из категории "gummy candies") посредством (либо):

  • Добавьте атрибут rel="canonical" в серию страниц с указанием канонической категории с параметром “view-all” (например, page=1, page=2, и page=3 из категории "gummy candies" с with rel=”canonical” на category=gummy-candies&page=all ), удостоверившись, что страница необходима пользователям и загружается быстро.
  • Используйте разметку разбиения на страницы rel="next" и rel="prev" , чтобы указать на связь между отдельными страницами (см. статью "Paginaton with rel="next" and rel="prev" ") .
Включите только канонические ссылки в файлы Sitemap .

Возвращает массив объектов содержащих информацию о категориях.

Параметры передаваемые этой функции очень похожи на параметры передаваемые функции wp_list_categories() и могут быть переданы как в виде массива, так и в виде строки запроса: type=post&order=DESC .

✈ 1 раз = 0.005625с = очень медленно | 50000 раз = 11.98с = медленно | PHP 7.1.11, WP 4.9.5

Использование

$categories = get_categories($args);

Шаблон использования

$categories = get_categories(array("taxonomy" => "category", "type" => "post", "child_of" => 0, "parent" => "", "orderby" => "name", "order" => "ASC", "hide_empty" => 1, "hierarchical" => 1, "exclude" => "", "include" => "", "number" => 0, "pad_counts" => false, // полный список параметров смотрите в описании функции http://wp-kama.ru/function/get_terms)); if($categories){ foreach($categories as $cat){ // Данные в объекте $cat // $cat->term_id // $cat->name (Рубрика 1) // $cat->slug (rubrika-1) // $cat->term_group (0) // $cat->term_taxonomy_id (4) // $cat->taxonomy (category) // $cat->description (Текст описания) // $cat->parent (0) // $cat->count (14) // $cat->object_id (2743) // $cat->cat_ID (4) // $cat->category_count (14) // $cat->category_description (Текст описания) // $cat->cat_name (Рубрика 1) // $cat->category_nicename (rubrika-1) // $cat->category_parent (0) } } taxonomy(строка) Название таксономии, которую нужно обрабатывать. Добавлено с версии 3.0.
По умолчанию: "category" type(строка)
  • post - категории для постов (по умолчанию);
  • link - разделы ссылок.
    По умолчанию: "post"
child_of(строка) Получить дочерние категории (включая все уровни вложенности), указанной категории. В параметре указывается ID родительской категории (категория, вложенные категории которой нужно показать). parent(число) Получает категории родительская категория которых равна указанному в параметре ID. Отличие от child_of в том, что будет показан один уровень вложенности.
По умолчанию: "" orderby(строка)

Сортировка полученных данных по определенным критериям. Например, по количеству постов в каждой категории или по названию категорий. Доступны следующие критерии:

  • ID - сортировка по ID;
  • name - сортировка по названию (по умолчанию);
  • slug - сортировка по алт. имени (slug);
  • count - по количеству записей в категории;
  • term_group - по группе.

По умолчанию: "name"

Order(строка)

Направление сортировки, указанной в параметре "orderby":

  • ASC - по порядку, от меньшего к большему (1, 2, 3; a, b, c);
  • DESC - в обратном порядке, от большего к меньшему (3, 2, 1; c, b, a).

По умолчанию: "ASC"

Hide_empty(логический)

Получать или нет пустые категории (не имеющие записей):

  • 1 (true) - не получать пустые,
  • 0 (false) - получать пустые.

По умолчанию: true

Hierarchical(логический) Если параметр установлен в true , то в результат будут включены пустые дочерние категории, дочерние категории которых имеют записи (непустые).
По умолчанию: true exclude(строка/массив) Исключить какие-либо категории из списка. Нужно указывать ID категорий через запятую или в массиве. Если этот параметр указан, параметр child_of будет отменен.
По умолчанию: "" include(строка/массив) Вывести списком только указанные категории. Указывать нужно ID категорий через запятую или в массиве.
По умолчанию: "" number(число) Лимит. Число категорий, которые будут получены. По умолчанию без ограничений - будут получены все категории. pad_counts(логический) Если передать true, то число которое показывает количество записей в родительских категориях будет суммой своих записей и записей из дочерних категорий.
По умолчанию: false

Примеры

#1 Выпадающий список

Для того, чтобы создать выпадающий список из категорий мы можем воспользоваться другой специальной для этой цели, функцией wp_dropdown_categories() :

Wp_dropdown_categories(array("hide_empty" => 0, "name" => "category_parent", "orderby" => "name", "selected" => $category->parent, "hierarchical" => true, "show_option_none" => __("None")));

однако с таким подходом мы лишимся определенной гибкости в настройке списка, так как мы получи уже полностью сформированный список.

Поэтому, в некоторых случаях будет логичнее создать выпадающий список с помощью функции get_categories() . Вот пример (предполагается что нам нужно вывести подкатегории (дочерние) категории 10):

#2 Список категорий и их описание

Этот пример покажет нам как можно вывести списком ссылки на категории, где сразу после каждой ссылки будет идти описание категории (указывается при создании/редактировании категории):

"name", "order" => "ASC")); foreach($categories as $category){ echo "

Category: term_id) . "" title="" . sprintf(__("View all posts in %s"), $category->name) . "" " . ">" . $category->name."

"; echo "

Description:". $category->description . "

"; echo "

Post Count: ". $category->count . "

"; } ?>

Заметки

  • Смотрите: get_terms() Type of arguments that can be changed.

Список изменений

С версии 2.1.0 Введена.

Код get categories : wp-includes/category.php WP 5.3.2

"category"); $args = wp_parse_args($args, $defaults); /** * Filters the taxonomy used to retrieve terms when calling get_categories(). * * @since 2.7.0 * * @param string $taxonomy Taxonomy to retrieve terms from. * @param array $args An array of arguments. See get_terms(). */ $args["taxonomy"] = apply_filters("get_categories_taxonomy", $args["taxonomy"], $args); // Back compat if (isset($args["type"]) && "link" == $args["type"]) { _deprecated_argument(__FUNCTION__, "3.0.0", sprintf(/* translators: 1: "type => link", 2: "taxonomy => link_category" */ __("%1$s is deprecated. Use %2$s instead."), "type => link", "taxonomy => link_category")); $args["taxonomy"] = "link_category"; } $categories = get_terms($args); if (is_wp_error($categories)) { $categories = array(); } else { $categories = (array) $categories; foreach (array_keys($categories) as $k) { _make_cat_compat($categories[ $k ]); } } return $categories; }

Для каждого поста и записи wordpress пользователь может задавать одну или несколько рубрик (категорий). Эта возможность позволяет сгруппировать близкие по смыслу записи и предоставить возможность посетителям читать и просматривать только те рубрики, которые им нравятся. Например, когда я создавай свой основной блог Tod’s Blog, то собирался писать обо всех нюансах интернета — начиная с дизайна и заканчивая программированием. Допустим, человек пришел из поисковика на статью про wordpress и захотел бы почитать про систему еще больше – ему пришлось бы рыться в архивах, повторно использовать поиск либо просматривать все посты подряд. Разумеется, этого всего можно было избежать, зайдя в специальную категорию под названием wordpress. Или, например, для те, кто увлекается лишь дизайном, могла быть интересна рубрика для блога.

Если внимательно посмотрите на шапку блога, то можете увидеть своего рода меню, где рубрики wordpress выступают в роли разделов проекта. Как по мне, это достаточно удобный и наглядный способ разделения тематики записей.

В самом центре страницы вы увидите форму для добавления новой категории. Здесь нужно указать ее название (имя), ярлык (часть ссылки url для чпу), родительскую категорию (если такая есть), а также можно задать краткое описание. Родительская категорий позволяет создавать в wordpress разделы с несколькими уровнями вложенности – например, для категории «водрпресс» на каком-то ИТ блоге можно добавить те же шаблоны, плагины и т.п.

Справа на странице Рубрики отображаются все категории wordpress, с возможностью из редактирования либо удаления. Чтобы произвести действия достаточно подвести курсор мышки на имя той или иной категории, после чего увидите небольшое всплывающее меню.

При редактировании вы увидите в одном из информационных блоков тот, где можно будет выбрать одну или несколько категорий для статьи. Просто поставьте галочки напротив нужных имен.

Здесь же можно добавлять новые рубрики – кликнув по соответствующей ссылке. Единственный недостаток этого механизма в том, что при создании можно указать лишь имя и родительскую категорию, тогда для как задания поля ярлык придется переходить в раздел «Рубрики» и редактировать информацию там.

Кроме того редактировать категории для постов в блоге можно через их список в меню Записи – Изменить. Там при наведении на ту или иную публикацию вы увидите ссылку «Быстрое редактирование». Нажимаем по ней и видим форму для правки:

Здесь можно изменить и категории, и теги, и всю дополнительную информацию по статье. Вещь очень удобная + работает без перезагрузки страницы.

Функция wp_list_categories для категории wordpress

По традиции рассматриваю не только вопрос работы с теми или иными элементами системы, но и привожу специальные функции для шаблонов. Точно также как я рассказывал про . Итак, для вывода списка категорий со ссылками на них используется wp_list_categories . Она имеет целый ряд аргументов:

  • show_option_all – отображает ссылка на все категории, если в качестве стиля отображения выбрал список.
  • orderby – сортировка для категорий по ID, имени (name), ярлыку (slug), количеству постов (count).
  • order – порядок сортировки (ASC – по увеличению, DESC – по уменьшению).
  • show_last_updated – показывать дату последнего обновления.
  • style – стиль оформления: список (list), разделение через
    (none).
  • show_count – отображать количество постов в категории.
  • hide_empty – скрывать пустые рубрики, где нет записей.
  • use_desc_for_title – использовать описание для атрибута title в ссылке.
  • child_of – вывод только категорий для заданной родительской рубрики.
  • feed – отображение ссылку на фид для категорий.
  • feed_type – тип фида.
  • feed_image – картинка для значка rss.
  • exclude – исключение категорий из списка, при этом параметр child_of автоматически отключается.
  • exclude_tree – исключения целой ветки рубрик.
  • include – обратный параметр, который включает только указанные категории wordpress в список.
  • hierarchical – параметр для отображения подкатегорий.
  • title_li – заголовок списка рубрик.
  • number – количество категорий для отображения (если их слишком много).
  • echo – выводит рубрики, по умолчанию равен True.
  • depth – указывает количество уровней для подкатегорий для вывода.

Напоследок приведу ряд примеров использования wp_list_categories. Во-первых, вариант из шапки этого блога.

"hide_empty=1&exclude=1&title_li=&orderby=count&order=desc&use_desc_for_title=0" ) ; ?>

Здесь задано отображение скрытых категорий, исключение из списка рубрики с, пустая строка для заголовка блока, сортировка по количеству статей и по уменьшению (то есть больше всего статей у меня в разделе ). Последний аргумент не подставляет описание категории в title для ссылки.

Ну и еще парочку простых ситуаций. Использование исключений и включений категорий.

Если есть что дополнить про рубрики и категории wordpress, пишем в комментариях.

Update: Также вам может пригодится небольшой хак чтобы . В wordpress по умолчанию определяется текст title что-то вроде «просмотреть все записи в рубрике ….», можно вместо этого просто оставить название рубрики — читаем статью по ссылке выше.

) я показал вам пример использования регулярных выражений для нахождения определенных кусков исходного кода страницы. Сейчас же мы с вами научимся писать их самостоятельно. Данный навык поможет писать , очищать текст от ненужных фрагментов, искать нужные части в больших объемах текста и так далее.

Дата публикации: 20.10.2013

Продолжаем писать парсер статистики посещений liveinternet. Если кто-то присоединился к нам только что, то советую начать с , где мы подключались к сервису без авторизации. Там мы научились получать контент с открытых страничек, которые не защищены паролем. Но, на самом деле, доступ к большинству сайтов закрыт, поэтому пользы от скрипта, который не умеет авторизовываться, очень мало, как вы понимаете. Но не беспокойтесь, сейчас все исправим.

Дата публикации: 08.10.2013

Добрый день, читатели! Пришло время немного попрактиковаться. У вас уже достаточно знаний, чтобы приступить к написанию полезных скриптов, которые будут облегчать вашу работу. Одним из таких может стать парсер. Что это такое я подробно расписывал в своей , так что если не знаете, советую прочитать. Кратко, суть парсера сводится к поиску и вычленению нужной информации из большого куска текста. В случае же с Интернетом, это чаще всего выдергивание требуемых данных из страниц сайтов. В нашем случае это будет Liveinternet. Итак, поехали!

Дата публикации: 10.03.2013

В этой статье речь пойдет о таком мощном инструменте как cURL, а также о библиотеке для php, которая предоставляет доступ к этому инструменту — libcurl. Для чего все это нужно? Для связи с сервером по протоколам передачи данных, например, http или ftp. Остальные протоколы нам не особо интересны, если кто-то хочет углубляться в эту тему, то придется уже копать англоязычные ресурсы, а в этой статье будут основы и примеры использования.

Дата публикации: 24.11.2012

Дата публикации: 05.11.2012

А сейчас будет достаточно большой, но не сложный урок о работе с файлами в php. Для начала, для чего нужны файлы? Ведь можно все хранить в базе данных MySQL или PostgreSQL или любой другой. Но иногда бывают такие задачи, когда использование БД, со всеми обработками и заботой о безопасности соединения, не целесообразно. Например нужно сделать обычный счетчик, а до этого в проекте у нас БД не использовалась. Так что нам, ради одного малюсенького счетчика заводить базу данных и хранить в ней всего пару строк? тут гораздо проще воспользоваться файлами. К тому же, иногда на хостинге вообще нет поддержки баз данных, тогда файлы вообще остаются единственным выходом.

Дата публикации: 04.11.2012

Всякий раз, когда вы позволяете вашим пользователям отправлять текст на ваш сайт (имя, или любая другая информация), вы должны быть осторожны. Нужно быть уверенным, что у вас нет дыр в безопасности сайта, которые злоумышленники могут использовать для взлома. Если все же нужно получать от пользователя данные, то обязательно используйте функцию htmlentities, чтобы предотвратить запуск HTML-кода или скриптов, которые могут быть вредны и опасны!

Дата публикации: 04.11.2012

В этом уроке мы рассмотри приемы передачи данных между формами и страницами. Такими методами являются POST и GET. О каждом мы поговорим отдельно и более подробно. Вообще говоря, это нужно для связи между формами. Например мы заполняем какие то поля на странице и нам нужно их передать в другую страницу для обработки.

Дата публикации: 03.11.2012

На самом деле, как вы могли уже догадаться, цикл do while представляет собой слегка модифицированную версию цикла while, которую мы в прошлых уроках. Если вы вспомните, как работает обычный while, то вам будет проще понять новый цикл. Давайте повторим: тело цикла while выполняется, если условие верно и не выполняется, если не верно, но может и не выполниться ни разу, если условие будет с самого начала ложно. Как же работает do while?

Дата публикации: 03.11.2012

Представьте, что у вас есть ассоциативный массив, который вы хотите перебрать. PHP предоставляет простой способ использовать каждый элемент массива по очереди с помощью Foreach конструкции.

Сегодня наша цель, создать иерархическую структуру категорий. Нам важно чтобы было удобно хранить категории и чтобы было легко выводить их там где нам надо.

Иногда простое кажется сложным, именно по этому выложу несколько фрагментов кода, которые я надеюсь вам пригодятся для реализации php категорий в виде дерева.

Итак, структура должна состоять из id категории (id), из названия категории (name) и конечно id родительской категории (parent_id). В MySQL это выглядит так:

CREATE TABLE IF NOT EXISTS `category` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `parent_id` int(11) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;

Минимальная и понятная структура таблицы для хранения категорий.

INSERT INTO `category` (`id`, `name`, `parent_id`) VALUES (1, "Телефоны и планшеты", "0"), (2, "Автомобили", "0"), (3, "Samsung", "1"), (4, "Apple", "1"), (5, "LG", "1"), (6, "Ford", "2"), (7, "Lexus", "2"), (8, "BMW", "2"), (9, "Galaxy Tab 4", "3"), (10, "Galaxy S6", "3");

Там где значение parent_id=0, у данной категории нет родительской категории.

Тут все понятно и просто. Теперь присутпим к выводу списка категорий. Но для правильного вывода списка, нам нужно сначала получить весь список php категорий, а уже потом с помощью рекурсии сформировать наше дерево. Следующая функция предназначена для получения этого списка:

Function get_cat() { //запрос к базе данных $sql = "SELECT * FROM category"; $result = mysql_query($sql); if(!$result) { return NULL; } $arr_cat = array(); if(mysql_num_rows($result) != 0) { //В цикле формируем массив for($i = 0; $i < mysql_num_rows($result);$i++) { $row = mysql_fetch_array($result,MYSQL_ASSOC); //Формируем массив, где ключами являются адишники на родительские категории if(empty($arr_cat[$row["parent_id"]])) { $arr_cat[$row["parent_id"]] = array(); } $arr_cat[$row["parent_id"]] = $row; } //возвращаем массив return $arr_cat; } }

//получаем массив каталога $result = get_cat();

Теперь нужна функция с рекурсией

Function view_cat($arr,$parent_id = 0) { //Условия выхода из рекурсии if(empty($arr[$parent_id])) { return; } echo "

    "; //перебираем в цикле массив и выводим на экран for($i = 0; $i < count($arr[$parent_id]);$i++) { echo "
  • " .$arr[$parent_id][$i]["name"].""; //рекурсия - проверяем нет ли дочерних категорий view_cat($arr,$arr[$parent_id][$i]["id"]); echo "
  • "; } echo "
"; }

Теперь осталось только вывести каталог на экран с помощью рекурсивной функции

View_cat($result);

И в общем то и всё. Таким образом мы можем получить полное дерево категорий с бесконечными подкатегориями.