Как сделать тег php

Обновлено: 07.07.2024

Доброго времени суток всем!
У меня возникла такая необходимость создать "такую" вещь, например, после некой статьи на сайте внизу, после нее, находиться перечень ключевых слов в виде ссылке.
нашел вот такую вещь (если конечно админы не удалят ссылку) [Ссылка удалена!]

В этой статье я расскажу и, естественно, покажу пример создания облака тегов для сайта (блога). Основные инструменты – PHP и фреймворк CodeIgniter (подойдет любой другой).

Но, прежде всего, хочу поблагодарить Delchyve за идею.

Итак, переходим к делу.

Вы, конечно, знаете, что облако тегов используется на многих сайтах (в основном это блоги) как элемент навигации. По-сути, облако тегов – это набор ссылок с ключевыми словами, рядом с которыми обычно пишут количество постов, которые относятся к данному тегу.

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

Если ваш сайт (блог) использует какую-нибудь CMS, например, WordPress, Joomla и т.п., то вы без труда найдете плагины, которые сами создадут облако тегов на основе ваших данных, а вам останется только разместить его в шаблоне сайта.

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

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

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

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

Поэтому гораздо удобнее хранить посты и теги в разных таблицах.

Допустим, наша таблица с постами (назовем ее posts) содержит такие поля:

1) id – первичный ключ;
2) title – заголовок;
3) text – текст поста;
4) date – дата;
и др.

А таблица с тегами (tags):

1) id – первичный ключ;
2) tag – имя тега.

1) id – первичный ключ;
2) postid – внешний ключ (связывает запись с таблицей posts);
3) tagid – внешний ключ (связывает запись с таблицей tags).

Каждая запись в таблице posts_tags определяет одну взаимосвязь между таблицами posts и tags.

На рисунке изображены связи между таблицами

Рассмотрим, как она заполняется.

Допустим в таблицах posts и tags уже есть какие-то данные.

id tag
1 php
2 html
3 java
4 ajax
5 JavaScript
Чтобы присвоить тег html второму посту (post 2), то в таблице posts_tags нужно создать запись:

postid = 2
tagid = 2

Хотим к этому же посту добавить еще тег JavaScript? Не проблема. Добавляем в posts_tags еще одну запись:

postid = 2
tagid = 5

Таким образом, используя эту таблицу, мы может создать любое количество взаимосвязей между постами и тегами.

Теперь переходим к реализации.

Как я и обещал, в качестве фреймворка мы будем использовать CodeIgniter. Но это совершенно не обязательно. Вы сможете легко переписать пример, используя только стандартные функции PHP.

Начнем с контроллера (main.php).

Как видите, он имеет всего один метод – index(), который будет создавать страницу с облаком.

В конструкторе мы загрузили библиотеку для работы с базой данных (строка 4), а в начале метода index() – модель tagcloudmodel (о ней чуть позже).

После этого мы вызываем метод getTagCloudData() модели, который возвращает нам массив со всей информацией, необходимой для построения облака. И затем показываем страницу (строки 10-13).

Отдельно хочу отметить, что для отображения облака нам нужны.

1) Перечень всех тегов. Не проблема, просто читаем содержимое таблицы tags.

2) Количество постов, которым присвоен каждый тег. Тут чуть сложнее. Нужно посчитать сколько раз встречаются одинаковые цифры в поле tagsid (таблица posts_tags).

Теперь рассмотрим модель (tagcloudmodel.php)

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

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

1) После предложения SELECT мы указываем, какие данные хотим получить (строка 7). Это имя тега и количество постов, которым он присвоен. (Для подсчета постов используем агрегатную функцию COUNT).

3) Группируем поля по первичному ключу тега (строка 9). После этой операции в результирующем массиве теги повторяться не будут, а функция COUNT подсчитает, сколько раз встретился каждый тег.

Примечание. Этот запрос вернет только те теги, которые присвоены хотя бы одному посту (т.е. существует запись в таблице posts_tags). Если по каким-то причинам вам нужно вывести все теги (включая те, для которых нет постов), измените порядок объединения таблиц в запросе: . FROM tags LEFT JOIN posts_tags ON.

Данные мы получили, переходим к созданию представлений.

Для этого примера я сделал 3 представления (заголовок, хвостовик и основная часть). Наверное, это перебор , но для реальных сайтов заголовок и хвостовик обычно повторяются для нескольких страниц, поэтому лучше их сразу отделить.

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

Здесь мы проверяем, найдены ли данные (строки 1-3) и если найдены, начинаем формировать облако.

Прежде всего, находим теги, которые присвоены минимальному и максимальному количеству постов (строки 5-14).

После этого задаем минимальный и максимальный размер шрифта (в данном случае я задал 70% и 150%).

Результат показан на скриншоте.

Естественно, для реального блога, каждый тег будет представлять собой ссылку, которая ведет на соответствующую страницу. Но это отдельная тема.

Как видите создать облако тегов совсем не сложно, задача, в общем-то, сводится к одному запросу.

Кстати, ради интереса посмотрите структуру базы данных WordPress. Думаю, вы легко найдете нужные таблицы.


А вообще как похожею "штуку" сделать самостоятельно. меня интересует только принцип построения-структура. Кто может, расскажите.
Заранее всем благодарен. (:

Наверняка ты знаком с принципом работы радиоуправляемых машинок. Нажимаешь вперёд - машинка едет, нажимаешь влево - машинка меняет направление колёс.

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

Мем, сравнивающий программирование на языке PHP и управление игрушечной машинки

Что такое PHP скрипт

PHP-скрипт - это обычный текстовый файлик с расширением .php . Точно такой же, как html и css.

Но есть одно важное отличие:

Создай в корневой папке сайта файл с названием index.php и открой его в своём текстовом редакторе. При наличии файла index.html его нужно удалить.

Если у тебя пока нет текстового редактора - рекомендую лёгкий и бесплатный Notepad++, он гораздо удобней встроенного в Windows блокнота.

Обязательно следи за кодировкой скриптов. Кодировка должна быть либо UTF-8 без BOM (если такая доступна в твоём редакторе), либо просто UTF-8.

Интерфейс выбора кодировки UTF-8 без BOM в Notepad++

Вывод чисел и строк в PHP

Команды PHP пишутся между тегами и ?> , например:

Команда echo отвечает за вывод информации на экран. После оператора указывается значение, которое нужно вывести.

Чтобы вывести текст, его нужно указать в одинарных или двойных кавычках:

Команды в PHP разделяются точкой с запятой. Для удобства чтения каждую команду принято писать с новой строки:

Результат в браузере:

Вывод HTML кода в PHP

HTML-код можно перемешивать с командами PHP:

Также HTML код можно подставить в PHPшную строку:

Результат в браузере:

Мы можем как угодно совмещать PHP код и HTML теги:

Функции в PHP

Функция - это команда, которая выполняет какие-либо действия, например расчёты, управление файлами и т.д.

Определить функцию просто - у неё после названия идут круглые скобки:

Функция phpinfo() выводит на экран информацию с текущими настройками PHP.

Пример таблицы с информацией, которую отображает функция phpinfo

Некоторые функции ожидают, что им передадут какое-нибудь значение. Например, функция округления ceil() ожидает число, которое она округлит:

Функция ceil() получает переданное нами значение 91.5 , обрабатывает его (округляет до 92) и возвращает результат. А команда echo получает возвращённое функцией значение и выводит его на экран. Результатом работы этого скрипта будет 92 .

Функции будут подробно рассмотрены в отдельном уроке.

Необходимость закрывающего тега в PHP

Если после PHP команд нет HTML или любого другого вывода на экран, то мы можем не использовать закрывающий тег ?> :

Сокращённый синтаксис открывающего тега в PHP

Вместо вы можете написать просто . Полезно для тех случаев, когда нам нужно подставить значение между HTML тегами, например:

Кроме этого, мы можем заменить тег на более короткую версию :

Использование тега вызывало множество споров в среде PHP разработчиков. Точку в этом вопросе поставили создатели языка PHP: начиная с PHP 7.4 короткий тег объявлен устаревшим, а в PHP 8 его уже не будет.

По этой причине я не рекомендую использовать короткий тег .

Это не относится к тегу , его можно спокойно использовать в своих проектах.

Комментарии в PHP

Многострочные комментарии размещаются между /* и */ :

Обратите внимание, многострочные комментарии нельзя вкладывать друг в друга:

Итого

PHP скрипт - это текстовый файл с расширением .php, в котором между тегами и ?> указываются команды PHP.

Важно следить за кодировкой скриптов и выбирать либо UTF-8 без BOM, либо просто UTF-8.

Для вывода каких-либо значений в браузер используется команда echo, либо сокращённый синтаксис :

Если после PHP-кода нет никакого вывода, закрывающий тег ?> можно опустить.

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

Принцип обработки файла содержащего PHP

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

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

Для лучшего понимания можете запустить у себя файл php следующего содержания:

Способы вставки PHP кода

Этот способ вставки выигрывает у своих альтернатив по ряду причин:

  • Не требует дополнительной активации или чего-либо в этом роде (доступен всегда)
  • Может быть без опасений использован в файлах со стандартами кода XML и XHTML
  • В силу своей распространенности стал практически общепринятым стандартом вставки PHP скриптов

Данная конструкция хоть и не требует никаких предварительных настроек от нас, как и предыдущая, но на практике встречается на порядок реже, поскольку не несет в себе никаких преимуществ.

Не смотря на всю свою простоту и привлекательность есть ряд причин по которым эта конструкция для вставки PHP не получила всеобщего признания, как первая:

  • Чтобы его возможно было использовать, нужно зайти в файл php.ini , найти в нем строку содержащую short_open_tag и активировать данный вид вставки скриптов в HTML код (в случае скомпилированного кода используется опция --enable-short-tags)
  • Иногда могут появляться проблемы с их поддержкой на не родном сервере, потому если Вы не имеете доступа к платформе, где будут после располагаться вписанные подобным образом скрипты, то лучше не применять эту конструкцию.
  • С версии PHP 5.4 конструкция будет верно истолкована парсером даже, если short_open_tag не будет активен, тем не менее ее применение на практике по-прежнему испытывает проблемы с совместимостью

Удобный на первый взгляд вариант также имеющий ряд проблем с применением на практике:

Когда интерпретатор PHP обрабатывает файл, он ищет теги и ?> , которые указывают, где начинается и где заканчивается PHP-код. Всё, что находится вне пары открывающих и закрывающих тегов, будет проигнорировано интерпретатором (т. е. просто будет отдано веб-серверу как есть). К примеру файл переданный интерпретатору PHP имеет следующий код:

Если файл содержит только PHP-код или он расположен в самом конце файла, то есть после него ничего уже нет, то закрывающий тег предпочтительно опустить (не указывать). Это помогает избежать добавления случайных пробельных символов после закрывающего тега PHP, которые могут послужить причиной нежелательных эффектов.

Читайте также: