Марна категорія php. PHP клас для зручної та безпечної роботи з MySQL. Детальніше про типизованих плейсхолдерів

Сьогодні наша мета – створити ієрархічну структуру категорій. Нам важливо, щоб було зручно зберігати категорії і щоб було легко виводити їх там, де нам треба.

Іноді просте здається складним, саме тому викладу кілька фрагментів коду, які я сподіваюся вам знадобляться для реалізації 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);

І загалом те й усе. Таким чином, ми можемо отримати повне дерево категорій з нескінченними підкатегоріями.

) я показав вам приклад використання регулярних виразів для знаходження певних шматків вихідного кодусторінки. Зараз ми з вами навчимося писати їх самостійно. Ця навичка допоможе писати, очищати текст від непотрібних фрагментів, шукати потрібні частини у великих обсягах тексту тощо.

Дата публікації: 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.

Повертає масив об'єктів, що містять інформацію про категорії.

Параметри цієї функції дуже схожі на параметри 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 Список категорій та їх опис

Цей приклад покаже нам як можна вивести списком посилання на категорії, де відразу після кожного посилання буде йти опис категорії (вказується під час створення/редагування категорії):

нотатки
  • Дивіться: get_terms() Type of arguments that can be changed.
список змін
З версії 2.1.0 Введено.
Код get categories : wp-includes/category.php WP 5.3.2