Стилевая рамка модуля: добавление нового стиля оформления модуля |
Стили оформления вообще и стилевая рамка модуля в частности рассматривались ранее в статьях нашего сайта. А здесь покажем, как они действуют, на примере создания нового стиля оформления модуля для специально настраиваемого шаблона. Для этого придется выполнить следующие действия.
Ради экономии времени скопируем уже имеющуюся функцию 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, но тернарный оператор более компактен и позволяет выполнить все необходимые действия в одной строке кода.
Понравился материал? Пригодилась информация? Плюсани в социалки!
|
Похожие новости | |
|