Как настроить смартфоны и ПК. Информационный портал
  • Главная
  • Windows 10
  • Последовательность работы (выполнения) компонентов Joomla. Слоеный пирог и com_weblinks Joomla Украшение weblinks php

Последовательность работы (выполнения) компонентов Joomla. Слоеный пирог и com_weblinks Joomla Украшение weblinks php

Точка входа в Joomla! компонент подобна у большинства компонентов. Для этого примера мы будем использовать один из компонентов ядра Joomla – Web Links (Ссылки на сайты). Первый файл, который будет выполнен во front-end: …/components/com_weblinks/weblinks.php .

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

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

// Require specific controller if requested if ($controller = JRequest:: getWord ("controller" ) ) { $path = JPATH_COMPONENT. DS. "controllers" . DS. $controller . ".php" ; if (file_exists ($path ) ) { require_once $path ; } else { $controller = "" ; } }

Теперь мы создаем экземпляр класса нашего контроллера, используя имя, которое определили выше:

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

// Redirect if set by the controller $controller -> redirect () ;
Класс контроллера (Controller Class)

Общий (характерный) контроллер для компонента ссылок находится здесь: …/components/com_weblinks/controller.php .
Весь этот класс определяет метод display, который является используемым по умолчанию, если пользователь не определяет другую задачу (task).

defined ("_JEXEC" ) or die ( "Restricted access" ) ; jimport("joomla.application.component.controller" ) ; /** * Weblinks Component Controller * * @package Joomla * @subpackage Weblinks * @since 1.5 */ class WeblinksController extends JController { /** * Method to show a weblinks view * * @access public * @since 1.5 */ function display() { // Set a default view if none exists if ( ! JRequest:: getCmd ( "view" ) ) { JRequest:: setVar ("view" , "categories" ) ; } //update the hit count for the weblink if (JRequest:: getCmd ("view" ) == "weblink" ) { $model =& $this -> getModel ("weblink" ) ; $model -> hit () ; } // View caching logic -- simple... are we logged in? $user = & JFactory:: getUser () ; $view = JRequest:: getVar ("view" ) ; $viewcache = JRequest:: getVar ("viewcache" , "1" , "POST" , "INT" ) ; if ($user -> get ("id" ) || ($view == "category" && $viewcache == 0 ) ) { parent:: display (false ) ; } else { parent:: display (true ) ; } } }

В этом методе мы устанавливаем вид (представление) по умолчанию: показ категорий, если другой вид не был передан как параметр строки запроса. Если требуемый вид — weblink, мы увеличиваем значение счетчика просмотра ссылки. Затем мы устанавливаем значение переменной вида и вызываем метод diplay нашего родительского класса JController .
Стоит обратить отдельное внимание на вызов метода getModel. Он загружает необходимую модель для компонента . В рассматриваемом примере, этот метод загрузит модель weblink, находущуюся здесь: …/components/com_weblinks/models/weblink.php .
Здесь условимся, что мы не запрашивали определенное представление, и поэтому наш вид будет установлен в categories.
Затем, мы открываем класс представления.

Класс представления (вида) (View Class)

Так как мы предполагаем, что хотим представление категорий, это — следующий файл, который будет выполнен: …/components/com_weblinks/views/categories/view.html.php

// Check to ensure this file is included in Joomla! defined ( "_JEXEC" ) or die ( "Restricted access" ) ; jimport( "joomla.application.component.view" ) ; /** * HTML View class for the WebLinks component * * @static * @package Joomla * @subpackage Weblinks * @since 1.0 */ class WeblinksViewCategories extends JView { function display( $tpl = null ) { global $mainframe ; $document =& JFactory:: getDocument () ; $categories =& $this -> get ("data" ) ; $total =& $this -> get ("total" ) ; $state =& $this -> get ("state" ) ; // Get the page/component configuration $params = & $mainframe -> getParams () ; $menus = & JSite:: getMenu () ; $menu = $menus -> getActive () ; // because the application sets a default page title, we need to get it // right from the menu item itself if (is_object ( $menu ) ) { $menu_params = new JParameter( $menu -> params ) ; if (! $menu_params -> get ( "page_title" ) ) { $params -> set ("page_title" , JText:: _( "Web Links" ) ) ; } } else { $params -> set ("page_title" , JText:: _( "Web Links" ) ) ; } $document -> setTitle ( $params -> get ( "page_title" ) ) ; // Set some defaults if not set for params $params -> def ("comp_description" , JText:: _("WEBLINKS_DESC" ) ) ; // Define image tag attributes if ($params -> get ("image" ) != - 1 ) { if ($params -> get ("image_align" ) != "" ) $attribs [ "align" ] = $params -> get ("image_align" ) ; else $attribs [ "align" ] = "" ; $attribs [ "hspace" ] = 6 ; // Use the static HTML library to build the image tag $image = JHTML:: _("image" , "images/stories/" . $params -> get ("image" ) , JText:: _("Web Links" ) , $attribs ) ; } for ($i = 0 ; $i < count ($categories ) ; $i ++ ) { $category =& $categories [ $i ] ; $category -> link = JRoute:: _("index.php?option=com_weblinks&view=category&id=" . $category -> slug ) ; // Prepare category description $category -> description = JHTML:: _("content.prepare" , $category -> description ) ; } $this -> assignRef ("image" , $image ) ; $this -> assignRef ("params" , $params ) ; $this -> assignRef ("categories" , $categories ) ; parent:: display ($tpl ) ; } } ?>

И снова, это — очень простой класс с одним методом display. БОльшая часть логики здесь является специфической для компонента ссылок, но если присмотреться можно найти функциональность используемую в большинстве классов представлений компонентов. В конце метода display этот класс вызывает родительский (JView) метод display , передавая название шаблона для отображения. Если название шаблона отображения не передается, используется шаблон «default».
И в последних, мы открываем класс шаблона.

Класс шаблона (Template Class)

Условимся что определенное имя шаблона не было передано, таким образом будет использован шаблон по умпочанию «default». В этом случае, следующий файл, который будет рассмотрен: …/components/com_weblinks/views/categories/tmpl/default.php
-> escape ($this -> params -> get ("page_title" ) ) ; ?>

  • ( )

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

Другие файлы, использующиеся в компонентах

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

  • Helpers — в компонентах зачастую используется файл helper.php или каталог helpers со многими файлами. Эти файлы обычно содержат только общие функциональные возможности для компонента.
  • Assets — это, кажется, всеобъемлющая папка для других файлов, включаемых в компонент.
  • router.php — этот файл используется, при включенной настройке SEF URL, для трансляции URL в обоих направлениях (в человеко-понятный с псевдонимами и в системный вид Joomla с параметрами).
  • xml-файлы — они обычно определяют параметры и другую информацию о компоненте, и его обозрение. Они используются, например, при создании пунктов меню компонента.
  • index.html — хорошая практика иметь пустой index.html файл во всех ваших каталогах. Это такая пассивная мера безопасности.
  • css/images/js — папки, которые содержат различные файлы для внедрения дизайна и функциональности на стороне клиента (в браузере).

Слоеный пирог

Речь пойдет о компоненте com_weblinks и о html-разметке страницы Joomla. О том, как легко и просто создать каталог ссылок на сайте Joomla.

Эта CMS и создавалась для интерактивной работы с зарегистрированным пользователем, без прямого кодирования. Хотя тенденция развитя Joomla ведет к тому, чтобы отказаться от компонента com_weblinks вовсе как от бесполезного на сайте, и просто добавляющего лишний вес (более 100 кб - 90 файлов) и без того "тяжелой" системе. Но пока этот компонент еще присутствует в дистрибутиве и используется некоторыми программистами.

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

Основные блоки:

Шаблон главной страницы (шаблон_сайта/index.php), который своей html-разметкой определяет позиции для модулей и компонентов и выводит эти модули и компоненты.
- шаблон страницы
- шаблоны модулей
- шаблоны компонентов

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

Начинающему программисту бывает трудно понять, что первая строка в контентной части страницы выводится как заголовок страницы и редактируется на странице редактирования пункта меню, который указывает на эту страницу. Что вторая строка выводится из шаблона компонента com_content или com_weblinks . А строки в шаблонах как правило - это строковые переменные и их инициализация и локализация производится в языковых файлах, таких как language\ru-RU\ru-RU.mod_weblinks.ini и им подобных.

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

Иногда шаблоны модулей называют макетами. Но это вопрос терминологии. Суть одна - это "одежда" для содержимого. Правильнее сказать - разметка. Так вот разметка одной экранной страницы находится в разных файлах каталогов Joomla.

Меню

Многие начинающие программисты Joomla часто не понимают, что пункты меню могут иметь разные типы. Иными словами - пункты меню могут ссылаться на объекты Joomla разных типов. Это могут быть разные объекты, такие как: компоненты (голосование, поиск, каталог ссылок и тд).

Выбор типа пункта меню:

Контакты (com_contact )
Список категорий контактов (categories )
Список контактов заданной категории (category )
Контакт (contact )
Избранные контакты (featured )

Материалы (com_content )
Архивные материалы (archive )
Материал (article)
Список всех категорий (categories )
Блог категории (blog category )
Список материалов категории (category)
Избранные материалы (featured )
Создать материал

Умный поиск (com_search )
Поиск (search )

Hello World! (com_helloworld )
Сообщение (helloworld )

Ленты новостей (com_newsfeeds )
Список всех категорий лент новостей (categories )
Список лент новостей в категории (category)
Лента новостей (newsfeed)

Поиск (com_search )
Форма поиска и список результатов поиска (search)

Менеджер пользователей (com_users )
Форма авторизации (login)
Профиль пользователя (profile)
Изменить профиль пользователя
Форма регистрации (registration)
Восстановление имени пользователя (remind)
Изменение пароля (reset)

Обёртка (com_wrapper )
Обёртка (wrapper)

Как видим, здесь все типы меню являются компонентами. Своим названием тип пункта меню фактически указывает на имя шаблона своего типа компонента. А шаблоны компонентов находятся в каталогах views (вид):

joomla\components\com_weblinks \views\categories
joomla\components\com_weblinks \views\category
joomla\components\com_weblinks \views\weblink
joomla\components\com_users\views\login

Как видим имена типов ссылок в меню и имена шаблонов в каталогах vews совпадают.

Разработчик имеет возможность создавать новые нестандартные шаблоны (макеты) для компонентов. Эти новые макеты так же будут отражаться в качестве новых типов меню в окне выбора типов меню. Это отдельная тема.

Демоконтент дистрибутива Joomla

Посмотрим как выстроена иерархия пунктов Меню "About Joomla" для отображения Компонента com_weblinks на установленном по умолчанию демо контенте (шаблон Beez2 - Default) Joomla.

Зайдем в админке на страницу редактирования компонента com_weblinks : Компоненты->Ссылки. Видим, что в демоконтенте, идущем с дистрибутивом создано пять категорий для компонента com_weblinks . Значит ссылки будут распределены по пяти категориям. Все созданные категории будут сохранены в таблице БД #_categories. В этой же таблице сохраняются категории и для других компонентов.

Sample Data-Weblinks
|-Park Links
|-Joomla! Specific Links
|-|-Other Resources
Uncategorised

В меню About Joomla (в редакторе меню) соответственно создана иерархия пунктов меню:

Иерархия пунктов меню:

Using Joomla! (тип: материал)
|-Using Extensions (тип: список всех категорий) :: список категорий в материалах
|-|-Components (тип: блог категории) :: категория в материалах
|-|-|-Weblinks Component (тип: материал)
|-|-|-|-Submit a Weblink (тип: создать ссылку) :: в компоненте Ссылки
|-|-|-|-Weblinks Single Category (тип: список ссылок в категории) :: в компоненте Ссылки
|-|-|-|-Weblinks Categories (тип: список категорий ссылок) :: в компоненте Ссылки

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

index.php?option=com_weblinks&view=form&layout=edit

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

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

Возможность пользователю самому добавлять ссылки на внешние сайты - это основной плюс и смысл компонента com_weblinks , как и возможность добавления пользователем нового контента - статей, изображений, видео файлов и тд.

Дать возможность зарегистрированному пользователю, наделенному правами, наполнять сайт содержимым без прямого кодирования - основная философия CMS Joomla.

Uncategorised
Sample Data-Articles
|- Joomla!
|-|- Extensions
|-|-|- Components
|-|-|- Modules
|-|-|-|- Content Modules
|-|-|-|- User Modules
|-|-|-|- Display Modules
|-|-|-|- Utility Modules
|-|-|-|- Navigation Modules
|-|-|- Templates
|-|-|-|- Atomic
|-|-|-|- Beez 20
|-|-|-|- Beez 5
|-|-|- Languages
|-|-|- Plugins
|- Park Site
|-|- Park Blog
|-|- Photo Gallery
|-|-|- Animals
|-|-|- Scenery
|- Fruit Shop Site
|-|- Growers
|-|- Recipes

Кажется не слишком много категорий для материалов!
Посмотреть иерархию категорий в материалах можно так же при помощи запроса к таблице категорий в БД:

SELECT * FROM `#_categories` WHERE `extension` = "com_content"

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

Для начала создадим базу адресов страниц и возможные анкоры к какждому из них. В качестве базы будем использовать файл формата *.txt . Структура файла будет такой:

Адрес_страницы_1;анкор_1,анкор_2,анкор_3,...,анкор_n адрес_страницы_2;анкор_1,анкор_2,анкор_3,...,анкор_n адрес_страницы_3;анкор_1,анкор_2,анкор_3,...,анкор_n ... адрес_страницы_n;анкор_1,анкор_2,анкор_3,...,анкор_n

Как видите, дальнейшее использование скрипта возможно при любом количестве адресов страниц и анкоров к ним. Адрес страницы пишется без http://www.site.ru/, т.е. сразу от корня без первого слэша. Адрес раздляется от анкоров через точка с запятой, а анкоры между собой просто запятой. Можно сделать и написание полного адреса, просто лично мне так удобнее, а изменить под себя заполнение и выдачу результата вы можете и сами, думаю, вы интуитивно и сами разберетесь.

И так, база ссылок и анкоров к ним создана, далее я приведу пример кода PHP для непосредственного вывода ссылок для перелинковки на сайте:

Вставляем этот код в любое место на сайте, который выводит 5 случайных ссылок из базы и случайным анкором. Анкоры лучше разбавлять, а не писать только 1 к ссылке. При грамотной перелинковке на сайте вы незамедлительно увидите прирост трафика и улучшение других показателей сайта.

Жду ваши вопросы в комментариях к данному посту.

Дата публикации: 03 марта, 2014
    Отзывы и комментарии:

    Дмитрий :
    Спасибо за скрипт, буду внедрять. Из исходного кода с сайта невозможно скопировать, копируется только маленькими отрывками, было бы удобнее целиком.

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

    Алексей Павлов :
    Ошибка в строчке $tex = explode(":",$sendlist[$count] Нужна точка с запятой, а не двоеточие. Я немного изменил код, сделал его понятнее:

Лучшие статьи по теме