Комментарии

Стилевая рамка модуля: добавление нового стиля оформления модуля
( 1 Проголосовало )

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

  • Создать новую функцию modChrome () в файле modules.php для специально настраиваемого шаблона.
  • Воспользоваться новым стилем при объявлении места расположения модуля в шаблоне с помощью элемента разметки jdoc: include в файле index.php.
  • Назначить модуль для этого места расположения.

Ради экономии времени скопируем уже имеющуюся функцию modChrome () из файла templates/system/html/modules.php, где она называется modChrome_table (), а затем вставим ее в конце файла templates/beez_20_copy/html/modules.php. Далее переименуем скопированную функцию на modChrome_beez20_copy FramedTable (). В итоге завершающий фрагмент кода из файла templates/beez_20_copy/html/modules.php будет выглядеть так.

Данная функция служит простым, но отличным примером сочетания кода HTML и РНР в одной компоновке. Обратите внимание на то, что выражение { ?> в пятой строке кода закрывает дескриптор РНР, поле чего можно ввести элементы разметки HTML. Сначала в этой функции создается элемент table разметки HTML-документа, а затем проверяется, требуется ли отобразить заголовок модуля. Если требуется, то создается элемент th разметки табличного заголовка. И наконец, содержимое модуля выводится в строке таблицы (элемент разметки tr) и ячейке таблицы (элемент разметки td).

В отношении данной функции необходимо также отметить следующее. Как упоминалось ранее, это функция, а не метод класса РНР, и поэтому она располагается в самом конце файла и не заключена в фигурные скобки определения класса. Поэтому непременно введите эту функцию в самом конце файла modules.php, т.е. после самой последней закрывающей фигурной скобки. Следует также иметь в виду, что наименование шаблона beez20__copy включено как составная часть в имя данной функции. Это очень важно сделать на тот случай, если данный шаблон предполагается использовать на веб-сайтах с другими шаблонами.

Как и следовало ожидать, в языке РНР не разрешается именовать одну и ту же функцию дважды, поскольку будет неясно, какой именно версией функции следует воспользоваться. При добавлении нового шаблона в оформление веб-сайта мы заранее не знаем, какие именно функции modChrome () могли быть введены в файлы modules .php имеющихся шаблонов. Поэтому включив название шаблона в имя функции, мы можем быть вполне уверены в том, что функция с аналогичным именем не встретится в другом шаблоне, а следовательно, не вызовет ошибку при выполнении кода РНР. Такой способ добавления уникального префикса к имени элемента программы иногда еще называется разделением на пространства имен. Аналогичным способом мы воспользуемся в дальнейшем при создании ключей для файлов языковой поддержки.

А теперь видоизменим новый стиль таким образом, чтобы заключить таблицу в рамку шириной 5 пикселей. С этой целью добавим атрибут border в элемент table разметки HTML-документа, как выделено полужирным в приведенном ниже фрагменте кода.

Имея в своем распоряжении новый стиль, мы должны теперь внести коррективы в файл index.php нашего шаблона, чтобы выделить место для применения данного стиля. С этой целью отредактируем файл templates/beez_20_copy/index.php, добавив в нем новое место расположения position-7a. Напомним, что места расположения модулей добавляются с помощью элемента разметки (или дескриптора) jdoc:include. Ниже приведен фрагмент кода с изменениями, внесенными в файл index. php и выделенными полужирным.

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

И наконец, нам нужно внести коррективы в сам модуль, чтобы использовать его на месте position-7a, выделенном в шаблоне. С этой целью перейдем к компоненту Module Manager (Диспетчер модулей) и изменим значение места расположения. Но поскольку мы не добавили место расположения в файл templateDetails.xml, то оно и не появится в списке, а следовательно, нам придется ввести его вручную. Кроме того, изменим назначение меню модуля (Menu Assignment), чтобы отображать его на всех страницах (On All Pages).

Если теперь отобразить начальную страницу веб-сайта, то модуль последних новостей появится в новой стилевой рамке. (Следует иметь в виду, что и в данном примере используется стандартная, а не замещенная компоновка, поскольку файл default.php был переименован в preview.php в папке templates/beez_20_copy/ html/mod_articles_latest.)

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

В этом фрагменте кода значение атрибута border устанавливается с помощью переменной $attribs [ 'border'] в коде РНР. Это значение должно быть затем передано рассматриваемой здесь функции с учетом атрибутов, указанных в элементе разметки jdoc:include. Для этого придется внести в файл index.php шаблона изменения, выделенные ниже полужирным.

В данном случае установлено значение 2 пикселя для атрибута border. А для того чтобы варьировать ширину обрамления в любом месте шаблона, где применяется стиль beez20_copyFramedTable, достаточно установить атрибут border в соответствующем элементе разметки j doc: include.

Но что, если оставить атрибут border за пределами элемента разметки jdoc: include? Прежде чем решиться на подобный эксперимент, следует выбрать сначала команду Global Configuration => Server (Глобальная настройка => Сервер) из меню в административной части веб-сайта, а затем вариант Maximum из раскрывающегося списка Error Reporting (Сообщение об ошибках).

Настоятельно рекомендуется устанавливать упомянутый выше режим сообщения об ошибках, приступая всякий раз к написанию кода для Joomla, и ниже будет показано, для чего это вообще нужно. Для этого придется вернуться к файлу index.php шаблона и удалить атрибут border из элемента jdoc: include, как показано ниже.

Если теперь мы отобразим рассматриваемый здесь модуль, то получим уведомляющее сообщение языка РНР. Дело в том, что мы ссылаемся на элемент массива, $attribs [ 'border'], который не определен. Если бы мы установили обычный режим сообщения об ошибках, то не получили бы подобное предупреждение.

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

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

В данном примере вычисляется выражение isset ($attribs [ 'border']). Если оно истинно, то в переменной $border устанавливается целочисленное значение элемента массива $attribs [ 'border' ], а иначе — значение 1. Оператор (int) используется для того, чтобы значение данного атрибута всегда было целочисленным. Если же пользователь по ошибке установит нецелочисленное значение атрибута border, оно все равно будет приведено к целочисленному.

Следует заметить, что аналогичного результата можно было бы добиться и с помощью условных операторов if/then, но тернарный оператор более компактен и позволяет выполнить все необходимые действия в одной строке кода.


Понравился материал? Пригодилась информация? Плюсани в социалки!


Теги:
 
Похожие новости