Изменение документа в joomla

Воскресенье, 13 Ноябрь 2011

 

Иногда возникает необходимость динамического внесения изменений в документ выводимый joomla (web страницу). Для того чтобы это сделать, необходимо вначале получить ссылку на глобальный объект документа используя класс JFactory. Осуществляется это следующим образом:

 

  •  
  • <?php
  • $document =& JFactory::getDocument();
  • ?>
  •  

 

После этого переменная $document будет буфером документа перед выводом, и мы можем вносить изменения в этот документ. Обратите внимание, что мы используем = & оператор присваивания для получения ссылки на объект. Если мы этого не сделаем, любые изменения которые мы применим к объекту документа - не будут применены. Все приведенные ниже примеры, предполагают что $document - это глобальный объект документа.

 

Page Title

 

Заголовок страницы является наиболее часто изменяемой частью документа, это содержимое тега <title> в <head> документа XHTML. Существует два метода работы с заголовком документа, это методы getTitle() и SetTitle(). Метод getTitle() возвращает существующий заголовок документа (web страницы), а метод SetTitle() устанавливает новое значение заголовка. Следующий пример демонстрирует применение метода SetTitle(), для изменения текущего заголовка документа:

 

  •  
  • <?php
  • $document->setTitle(JText::_('Some Exciting Title'));
  • ?>
  •  

 

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

 

  •  
  • <?php
  • $title = $document->getTitle().' - '.JText::_('Some Exciting Title')
  • $document->setTitle($title);
  • ?>
  •  

 

Pathway (Путь)

 

Pathway - путь, или хлебные крошки используется в документе для отображения пользователю текущего местоположения на сайте, относительно главной страницы. Мы также можем изменить структуру пути, например это может понадобится для расширения (компонента) который имеет несколько категорий и для этого необходимо добавить пункты для отображения этой иерархии. Для доступа к объекту пути нужно получить ссылку на глобальный объект JPathway, следующий пример демонстрирует как это осуществить:

 

  •  
  • <?php
  • $pathway =& $mainframe->getPathway();
  • ?>
  •  

 

Обратите внимание, что мы используем = & оператор присваивания для получения ссылки на объект. Если мы этого не сделаем, любые изменения которые мы применим к объекту pathway - не будут применены. Для добавления нового элемента в к пути, используется метод AddItem(). К примеру при просмотре категории компонента мы хотим добавить к пути, следующий пример демонстрирует как это сделать:

 

  •  
  • <?php
  • $pathway->addItem($categoryName);
  • ?>
  •  

 

Существует одна очевидны, чего не хватает из этого примера. Существует нет URI. Так как мы рассматриваем категорию, нет необходимости указывать URI, потому что это текущий URI. Однако как можно заметить, в приведенном примере не хватает одной детали - указания URL адреса категории, но ведь при просмотре категории нет необходимости указания ее URL адреса, потому что это текущий адрес.

 

Последний пункт в пути никогда не ссылка. Нам нужно только указать URL, когда мы добавляем элементы, которые не будет последним пунктом в пути. Этот пример показывает, как мы могли бы построить путь для элемента предыдущей категории относительно текущей:

 

  •  
  • <?php
  • $pathway->addItem($categoryName, $categoryURI);
  • $pathway->addItem($itemName);
  • ?>
  •  

 

Обратите внимание на этот раз мы включили URI при добавлении категории пункта. Это нормально, б добавить к пути на дисплее () метод каждого класса JView. Важно понимать, что мы всегда должны добавить путь элементы в порядке их появления. Обратите внимание что в приведенном примере, в добавляемый пункт пути был включает URL на категорию, и если в настоящий момент отображается категория joomla, это приведет к ошибке, так как мы должны соблюдать последовательность добавления пунктов к пути, мы можем обойти это получив текущий пункт меню следующим образом:

 

  •  
  • <?php
  • $menus =& JMenu::getInstance();
  • $menuitem =& $menus->getActive();
  • ?>
  •  

 

JMenu класс отвечает за обработку меню в Joomla!. GetActive() возвращает ссылку на текущий выбранный объект пункт меню. После этого $menuitem это объект StdClass, который содержит различные атрибуты, которые относятся к текущему пункту меню. Атрибут, который нас интересует в запросе в этом ассоциативном массиве, это view и чтобы обойти предыдущую ошибку, мы должны сделать следующее:

 

  •  
  • if ($menuitem->query['view'] != 'category')
  • {
  • $pathway =& $mainframe->getPathWay();
  • $pathway->addItem($categoryName);
  • }
  • ?>
  •  

 

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

 

  •  
  • <?php
  • if ($menuitem->query['view'] != 'item')
  • {
  • $pathway =& $mainframe->getPathWay();
  • switch ($menuitem->query['view'])
  • {
  • case 'categories':
  • $pathway->addItem($categoryName, $categoryURI);
  • default:
  • $pathway->addItem($itemName);
  • }
  • }
  • ?>
  •  

 

JavaScript

 

Для того, чтобы добавить JavaScript чисто она должна быть добавлена в заголовок документа. Мы можем использовать следующие методы для добавления JavaScript следующим образом: Для добавления Javascript в документ, с соблюдением валидной верстки, следует использовать метод AddScript(), который добавляет ссылку на внешний файл javascript в HEAD документа. Это пример того, как использовать addScript () метод:

 

  •  
  • <?php
  • $js = JURI::base().'components/com_some/assets/script.js';
  • $document->addScript($js);
  • ?>
  •  

 

Метод AddScriptDeclaration() похож, он позволяет добавлять исполняемый JavaScript код в заголовок документа. Это пример того, как использовать addScriptDeclaration() метод:

 

  •  
  • <?php
  • $js = 'function notify(text) { alert(text); }';
  • $document->addScriptDeclaration($js);
  • ?>
  •  

 

CSS

 

Для того, чтобы добавить стили CSS чисто они должны быть добавлены в заголовке документа. Мы можем использовать методы addStyleSheet() и addStyleDeclaration() для добавления CSS. ДЛя правильного добавления CSS (с соблюдением правил валидной верстки), мы можем использовать методы addStyleSheet() и addStyleDeclaration() Это пример того, как использовать addStyleSheet() метод:

 

  •  
  • <?php
  • $css = JURI::base().'components/com_foobar/assets/style.css';
  • $document =& JFactory::getDocument();
  • $document->addStyleSheet($css);
  • ?>
  •  

 

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

 

Допустимые значения media type MIME:

 

 

  •  
  • <?php
  • $document->addStyleSheet($css, 'text/css', 'print');
  • ?>
  •  

 

Также как и для javascript возможно использовать метод addStyleDeclaration():

 

  •  
  • <?php
  • $css = '.somestyle { padding: 10px; }';
  • $document->addStyleDeclaration($css);
  • ?>
  •  

 

Metadata

 

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

 

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

 

  •  
  • <?php
  • $keywords = 'monkey, ape, chimpanzee, gorilla, orang-utan';
  • $document->setMetaData('keywords', $keywords);
  • ?>
  •  

 

Добавление HTTP-EQUIV метаданных очень похоже. Представьте себе если мы хотим выключить стильи браузера. Мы можем использовать HTTP-EQUIV тип метаданных MSTHEMECOMPATIBLE:

 

  •  
  • <?php
  • $document->setMetaData('MSTHEMECOMPATIBLE', 'no', true);
  • ?>
  •  

 

Метод GetMetadata() позволяющий получить метаданные, дает нам возможность добавить к текущим метаданным, дополнительные метаданные как показано в примере ниже:

 

  •  
  • <?php
  • $keywords = explode(',', $document->getMetaData('keywords'));
  • $keywords[] = 'append me';
  • $keywords[] = 'and me';
  • $document->setMetaData('keywords', implode(',', $keywords));
  • ?>
  •  

 

Custom header tags

 

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

 

  •  
  • <?php
  • $comment = '<!-- Oi, stop looking at my page source! :p -->';
  • $document->addCustomTag($comment);
  • ?>
  •  

 

PS. Читайте последние записи RSS Подписка на RSS

 

Метки:

Добавить комментарий