Deprecated: str_replace(): Passing null to parameter #1 ($search) of type array|string is deprecated in /var/www/jsd/data/www/jsd.ru/plugins/system/admintools/src/Feature/CustomAdminFolder.php on line 83
Шаблонизация материалов блога https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating Tue, 22 Oct 2024 09:29:55 +0300 Joomla! - Open Source Content Management ru-ru Делим тело статьи на логические блоки https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/delim-telo-stati-na-logicheskie-bloki https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/delim-telo-stati-na-logicheskie-bloki Шаблонизация материалов блога Tue, 09 Jul 2024 00:09:18 +0300 Элементный состав разметки https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/elementnyj-sostav-razmetki https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/elementnyj-sostav-razmetki `, т.к. если ему не задавать никаких свойств, то он не будет влиять ни на что вообще, но такой тег может потребоваться непосредственно внутри текста, а его закрывающая часть может запутать регулярное выражение и извлеченный из всей статьи фрагмент будет обрезан не там, где нужно. Поэтому используем блочный тег `
`, от которого хуже тоже не станет, если применять с умом. Никакой традиционной полезной нагрузки в виде классов и стилей тег нести не будет, мы поместим в него только один универсальный атрибут – `id`, которому в качестве значений будем присваивать имена нашего элементного состава. Воспроизведу предыдущий список (без элементов изображений), воплощенный в HTML разметку: ```
``` Теперь осталось обернуть этими тегами нужные фрагменты тела статьи. **Важно!** Для блоков текста необходимо добавить теги абзацев `

` Вариант применения HTML разметки тела статьи представлен на скриншоте. ]]>
Шаблонизация материалов блога Tue, 09 Jul 2024 00:54:17 +0300
Получение тела статьи https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/poluchenie-tela-stati https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/poluchenie-tela-stati {/source} ``` Странный тег-контейнер `{$ource}{/source}` является частью синтаксиса плагина Sourcerer от Regular Labs, установка которого позволяет (в том числе) использовать произвольный пользовательский PHP-код внутри полей Joomla. Для получения тела статьи нужно использовать стандартный элемент конструктора **Code**, который изначально предназначен для отображения любого кода и является единственным элементом, который не очищает получаемые данные от HTML кода, который мы используем для разметки статьи. Элемент **Code**, ответственный за передачу тела статьи переменной, нужно разместить в любом месте, предшествующем выводу статьи. Теоретически можно получить контент статьи с помощью родных переменных Joomla, но я фиговый программист и не умею так делать, поэтому получаю тело статьи с помощью элемента, работающего с динамическими данными. **Работа с элементом:** - Код (элемент) -> Ещё (вкладка) -> Имя (поле) -> Задаю элементу имя «Помещаем HTML код материала в переменную $page_content». Делается это исключительно для наглядности и чтобы не запутаться. - Код (элемент) -> Ещё (вкладка) -> Динамический контент (поле) -> Выбираем из списка «Материал». - Код (элемент) -> Контент (вкладка) -> Контент (поле) -> Выбирать динамически (ссылка) -> Материал (группа) -> Контент (тип данных) - Код (элемент) -> Контент (вкладка) -> Контент (поле) -> Редактировать (кнопка с изображением карандаша внутри поля) -> Фильтры (группа полей) -> После (поле) -> `'; ?> {/source}` (Любой «разорванный» PHP-код нужно вставлять начиная с завершающей части, чтобы избежать фатальных ошибок PHP) - Код (элемент) -> Контент (вкладка) -> Контент (поле) -> Редактировать (кнопка с изображением карандаша внутри поля) -> Фильтры (группа полей) -> До (поле) -> `{$ource} Шаблонизация материалов блога Tue, 09 Jul 2024 13:37:21 +0300 Разделение тела статьи на фрагменты по маркерам https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/razdelenie-tela-stati-na-fragmenty-po-markeram https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/razdelenie-tela-stati-na-fragmenty-po-markeram (.*?)|is` Маска регулярного выражения находится между вертикальными чертами `|`, чтобы исключить конфликт с элементами тега. Модификаторы (после маски выражения). - i - Регистронезависимый поиск (на само деле не очень нужен в примере). - s – Означает, что символ точка включает в себя переносы строк, т.е. поиск будет по всем строкам, а не по одной. Открывающий и закрывающий тэги разметки приведены в регулярном выражении в полном виде. Содержимое между тегов объединено в группу с помощью скобок и представляет из себя: - Точка – Соответствует любому единичному символу. - Звёздочка – После выражения, соответствующего единичному символу, соответствует нулю или более копий этого выражения. - Знак вопроса – Ленивый (не жадный) квантификатор, означающий в данном примере, что поиск будет производится до первого закрывающего тега ``, а не до последнего. Если написал какую-нибудь фигню, то извините, в регулярных выражениях я не большой специалист, как и в программировании. В связке с PHP-кодом регулярное выражение будет выглядеть так: ``` if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$intro=$required_content[1];} ``` Поскольку функция `preg_match()` возвращает количество найденных строк (или false в случае ошибки), мы сразу помещаем её внутрь оператора-условия `if`. Таким образом, если поиск не дал результатов, то и вторая строка кода выполняться не будет. Функция `preg_match()` ищет соответствия шаблону регулярного выражения в переменной `$page_content ` и помещает результаты поиска в переменную `$required_content`. Массив с результатами поиска (в нашем случае `$required_content`) состоит из двух частей: в `$required_content[0]` будут найденные строки вместе с открывающим и закрывающим тегами div, а в `$ required_content [1]` будут те же строки без тега div, т.е. тот текст, что находится в круглых скобках регулярного выражения. (Так должно быть, но у меня если честно, в обеих переменных текст без тега div.) В случае, если с поиском всё тик-так, то сработает вторая строка кода, которая передаст переменной с уникальным (в рамках нашего кода) и понятным в контексте именем значение переменной `$ required_content [1]`, содержащей «чистые» результаты поиска. Полный код извлечения фрагментов рассчитан на 10 блоков и выглядит так: ``` (.*?)|is', $page_content, $required_content)) {$intro=$required_content[1];} //if (isset($intro)) //{echo $intro;} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$heading_01=$required_content[1];} //if (isset($heading_01)) //{echo $heading_01;} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$block_01=$required_content[1];} //if (isset($block_01)) //{echo $block_01;} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$heading_02=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$block_02=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$heading_03=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$block_03=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$heading_04=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$block_04=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$heading_05=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$block_05=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$heading_06=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$block_06=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$heading_07=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$block_07=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$heading_08=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$block_08=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$heading_09=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$block_09=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$heading_10=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$block_10=$required_content[1];} if (preg_match('|
(.*?)
|is', $page_content, $required_content)) {$conclusion=$required_content[1];} ?> ``` Понимаю, что код выглядит громоздко и, почти наверняка, его можно представить в более изящной форме, но я ничего лучшего придумать не смог. Если кто предложит хороший вариант - буду благодарен. Закомментированные фрагменты кода отвечают за вывод на экран содержимого переменных, в случае если оно есть, что сделано исключительно для отладки и проверки работы кода. Все закомментированные участки кода можно удалить. Приведенный выше код нужно обернуть в служебные теги плагина `{$ource}{/source}` и поместить в элемент конструктора Code, который должен следовать за элементом, описанным в предыдущим шаге инструкции. **Работа с элементом:** - Код (элемент) -> Ещё (вкладка) -> Имя (поле) -> Задаю элементу имя «Разделяем контент страницы на фрагменты по тегам-маркерам и присваиваем их переменным». Делается это исключительно для наглядности и чтобы не запутаться. - Код (элемент) -> Контент (вкладка) -> Контент (поле) -> Разместить код (сам код и условия размещения приведены выше).]]>
Шаблонизация материалов блога Tue, 09 Jul 2024 19:38:14 +0300
Создание простейшего шаблона для статьи https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/sozdanie-prostejshego-shablona-dlya-stati https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/sozdanie-prostejshego-shablona-dlya-stati Шаблонизация материалов блога Wed, 10 Jul 2024 00:24:16 +0300 Элементный состав шаблона https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/elementnyj-sostav-shablona https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/elementnyj-sostav-shablona Шаблонизация материалов блога Wed, 10 Jul 2024 00:39:16 +0300 Проверка строки на необходимость отображения https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/proverka-stroki-na-neobkhodimost-otobrazheniya https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/proverka-stroki-na-neobkhodimost-otobrazheniya Ещё -> Динамический контент (поле выбора) -> Страница (группа) -> Материал (источник данных) - Строка -> Ещё -> Динамическое состояние (поле выбора) -> Материал (источник данных) -> Контент (тип данных) - Строка -> Ещё -> Условие (поле выбора) -> Содержит - Строка -> Ещё -> Значение (поле ввода) -> `
` В качестве значения всегда вводить открывающий div тег разметки текстовой составляющей логического блока. Заголовок или картинка могут отсутствовать в основных текстовых блоках, поэтому ориентируемся именно на текст. - Введение - `
` - Основные текстовые блоки - `
` (где XX – номер блока) - Заключение - `
` ]]> Шаблонизация материалов блога Wed, 10 Jul 2024 01:20:53 +0300 Введение – текст https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/vvedenie-tekst https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/vvedenie-tekst Контент (вкладка) -> Контент (поле ввода текста) -> Разместить код: ``` {$ource} {/source} ``` - Текст (элемент) -> Настройки (вкладка) -> Текст (группа настроек) -> Цвет текста (поле выбора) -> Emphasis (чтобы текст введения был немного ярче основных текстовых блоков). - Текст (элемент) -> Ещё (вкладка) -> Имя (поле ввода) -> `intro` (задаём имя элемента) Введенный в качестве контента код обеспечит вывод для отображения на странице содержимого переменной `$intro `, в которой находится текст введения. Настройка логического элемента «Заключение» будет почти идентичной, только в качестве переменной для отображения нужно будет использовать `$conclusion`, а в качестве имени элемента конструктора «conclusion». Также стоит отказаться от завершающего элемента разделителя, т.к. после заключения он будет не уместен. ]]> Шаблонизация материалов блога Wed, 10 Jul 2024 13:20:33 +0300 Основные текстовые блоки – заголовок https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/osnovnye-tekstovye-bloki-zagolovok https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/osnovnye-tekstovye-bloki-zagolovok Контент (вкладка) -> Контент (поле ввода текста) -> Разместить код: ``` {$ource} {/source} ``` - Заголовок (элемент) -> Настройки (вкладка) -> Заголовок (группа настроек) -> HTML элемент (поле выбора) -> h3 (оптимальный тег для подзаголовков блоков статьи). - Заголовок (элемент) -> Ещё (вкладка) -> Имя (поле ввода) -> `heading_01` (задаём имя элемента). ]]> Шаблонизация материалов блога Wed, 10 Jul 2024 13:48:52 +0300 Концепция работы с изображениями https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/kontseptsiya-raboty-s-izobrazheniyami https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/kontseptsiya-raboty-s-izobrazheniyami Шаблонизация материалов блога Wed, 10 Jul 2024 19:14:27 +0300 Основные текстовые блоки – изображение PNG https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/osnovnye-tekstovye-bloki-izobrazhenie-png https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/osnovnye-tekstovye-bloki-izobrazhenie-png Контент (вкладка) –> Изображение (поле ввода) –> Выбирать динамически (ссылка над полем справа) –> Страница (группа) –> Материал (источник данных) –> Алиас (тип данных). - Изображение (элемент) – Контент (вкладка) – Изображение (поле ввода) -> Редактировать (кнопка с изображением карандаша внутри поля) -> Фильтры (группа полей) -> До (поле ввода) -> `images/blog/` (путь к папке с изображениями блога). - Изображение (элемент) – Контент (вкладка) – Изображение (поле ввода) -> Редактировать (кнопка с изображением карандаша внутри поля) -> Фильтры (группа полей) -> После (поле ввода) -> ` _01.png` (порядковый номер изображения и расширение файла). - Изображение (элемент) –> Контент (вкладка) –> Атрибут alt изображения (поле ввода) –> ` {s0urce} {/source}` (В качестве значения атрибута `alt` изображения используется заголовок блока. Если его нет, то атрибут останется пустым.). **Изображение – Настройки** Тут у нас всё для настройки внешнего вида изображения. Воспользуюсь только одной опцией: центрирование по горизонтали. - Изображение (элемент) –> Настройки (вкладка) -> Общие (группа настроек) -> Выравнивание (поле выбора) -> По центру. **Изображение – Ещё** Здесь зададим имя элементу (ну, это просто) и настроим проверку на существование файла изображения, чтобы не выводить его в случае отсутствия (а то пустые альты повылезают от картинок или того хуже). Для проверки наличия изображения будем использовать динамические данные файла, конкретно его размер. Если размер не пустой, значит файл существует. Для настройки пути проверки потребуется обращение к алиасу материала через динамические данные. Настройка пути файла делается точно также как на вкладке «Контент». - Изображение (элемент) –> Ещё (вкладка) –> Имя (поле ввода) -> ` _01.png` (имя элемента, чтобы не запутаться). - Изображение (элемент) –> Ещё (вкладка) –> Динамический контент (поле выбора) -> Внешний (группа) -> Файл (источник данных). - Изображение (элемент) –> Ещё (вкладка) –> Шаблон пути (поле ввода) -> Выбирать динамически (ссылка над полем справа) –> Страница (группа) –> Материал (источник данных) –> Алиас (тип данных). - Изображение (элемент) –> Ещё (вкладка) –> Шаблон пути (поле ввода) -> Редактировать (кнопка с изображением карандаша внутри поля) -> Фильтры (группа полей) -> До (поле ввода) -> `images/blog/` (путь к папке с изображениями блога). - Изображение (элемент) –> Ещё (вкладка) –> Шаблон пути (поле ввода) -> Редактировать (кнопка с изображением карандаша внутри поля) -> Фильтры (группа полей) -> После (поле ввода) -> ` _01.png` (порядковый номер изображения и расширение файла). - Изображение (элемент) –> Ещё (вкладка) –> Динамическое состояние (поле выбора) -> Файл (источник данных) -> Размер (тип данных). - Изображение (элемент) –> Ещё (вкладка) –> Условие (поле выбора) -> Не пустой]]> Шаблонизация материалов блога Fri, 12 Jul 2024 00:01:07 +0300 Основные текстовые блоки – изображение JPG https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/osnovnye-tekstovye-bloki-izobrazhenie-jpg https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/osnovnye-tekstovye-bloki-izobrazhenie-jpg Шаблонизация материалов блога Fri, 12 Jul 2024 00:09:15 +0300 Основные текстовые блоки – текст https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/osnovnye-tekstovye-bloki-tekst https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/osnovnye-tekstovye-bloki-tekst Контент (вкладка) -> Контент (поле ввода текста) -> Разместить код: ``` {$ource} {/source} ``` - Текст (элемент) -> Ещё (вкладка) -> Имя (поле ввода) -> `block_01` (задаём имя элемента) После элемента текста в шаблоне поставлен элемент разделителя, но, как я уже говорил ранее, это только для нарядности, - никакого функционала. ]]> Шаблонизация материалов блога Fri, 12 Jul 2024 17:14:13 +0300 Размножение основных текстовых блоков методом копирования https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/razmnozhenie-osnovnykh-tekstovykh-blokov-metodom-kopirovaniya https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/razmnozhenie-osnovnykh-tekstovykh-blokov-metodom-kopirovaniya Ещё (вкладка) -> Значение (поле ввода) -> Изменить номер блока. **Заголовок:** - Заголовок (элемент) -> Контент (вкладка) -> Контент (поле ввода) -> Изменить номер заголовка. - Заголовок (элемент) -> Ещё (вкладка) -> Имя (поле ввода) - Изменить номер заголовка. **Изображение PNG:** - Изображение (элемент) -> Контент (вкладка) –> Изображение (поле ввода) -> Редактировать (кнопка внутри поля) -> После (поле ввода) -> Изменить номер во фрагменте имени файла. - Изображение (элемент) -> Контент (вкладка) –> Атрибут ALT изображения (поле ввода) -> Изменить номер в переменной заголовка, которая используется в качестве атрибута. - Изображение (элемент) -> Ещё (вкладка) -> Имя (поле ввода) -> Изменить номер в имени блока. - Изображение (элемент) -> Ещё (вкладка) -> Шаблон пути (поле ввода) -> Редактировать (кнопка внутри поля) -> После (поле ввода) -> Изменить номер во фрагменте имени файла. **Изображение JPG:** - Произвести действия, идентичные корректировкам для изображения PNG. **Текст:** - Текст (элемент) -> Контент (вкладка) -> Контент (поле ввода) -> Изменить номер блока в переменной. Текст (элемент) -> Ещё (вкладка) -> Имя (поле ввода) -> Изменить номер имени блока. ]]> Шаблонизация материалов блога Fri, 12 Jul 2024 20:04:45 +0300 Что дальше? https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/chto-dalshe https://www.jsd.ru/web/howo-pro-sale-of-trucks-of-chinese-brands/blog-content-templating/chto-dalshe Шаблонизация материалов блога Fri, 12 Jul 2024 20:15:49 +0300