Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Samouchitel_po_razrabotke_rasshireny_dlya_Jooml....docx
Скачиваний:
3
Добавлен:
10.11.2018
Размер:
2.53 Mб
Скачать

Параметры для Компонентов

В рамках усилий по интернационализации нашего Компонента, мы хотим дать администраторам возможность изменения валюты символ которой отображается рядом с полем средняя цена обеда (average dinner price). Наш Компонент имел несколько Видов, и мы можем настроить каждый из них в отдельности. Вместо того чтобы писать XML-файл в ИА, мы сделаем по одному для каждого Вида в ИП. Для начала, создайте файл metadata.xml в папке /components/com_reviews/views/all и добавьте следующую информацию:

<?xml version="1.0" encoding="utf8"?>

<metadata>

<view title="All">

<message>

<![CDATA[Shows all reviews.]]>

</message>

</view>

<params>

<param name="currency_symbol" type="text" size="3"

default="$" label="Currency Symbol"

description="Enter the currency symbol

to be used for average dinner prices." />

</params>

</metadata>

XML-файл конфигурации для просмотра гораздо меньше того, что используется для всего расширения. Во-первых, мы располагаем все наши данные в теге <metadata>. Далее, в теге <view> с названием параметра, которое мы увидим в ИА. Тег <message> помещается внутрь и содержит описание которое отображается при наведении мышки. В ИА и выберите Menus / Main Menu, затем выберите команду New. После выбора Restaurant Reviews как тип меню, вы увидите такой экран:

Клик по Default Layout внутри All выведет экран конфигурации с Menu Item Parameters, как показано на следующем рисунке:

Определение символа валюты в конфигурации в ИП потребует некоторых изменений в классе display(), что управляет отдельными Обзорами. Откройте /components/com_reviews/views/review/view.html.php и сделайте следующие модификации (выделено):

class ReviewViewReview extends JView

{

function display($tpl = null)

{

global $option, $mainframe;

$model = &$this->getModel();

$user =& JFactory::getUser();

$review = $model->getReview();

$comments = $model->getComments();

$pathway =& $mainframe->getPathWay();

$backlink = JRoute::_('index.php?option=' . $option);

$menu =& JMenu::getInstance();

$item = $menu->getActive();

$params =& $menu->getParams($item->id);

$currency = $params->get('currency_symbol', '$');

$review->review_date = JHTML::Date($review->review_date);

if($review->smoking == 1)

{

$review->smoking = "Yes";

}

else

{

$review->smoking = "No";

}

for($i = 0; $i < count($comments); $i++)

{

$row =& $comments[$i];

$row->comment_date = JHTML::Date($row->comment_date);

}

$pathway->addItem($review->name, '');

$this->assignRef('review', $review);

$this->assignRef('comments', $comments);

$this->assignRef('backlink', $backlink);

$this->assignRef('Itemid', $Itemid);

$this->assignRef('option', $option);

$this->assignRef('name', $user->_table->name);

$this->assignRef('currency', $currency);

parent::display($tpl);

}

}

Чтобы включить символ валюты, установленный в настройках, нам необходимо загрузить параметры. Поскольку параметры сохраняются в пункте меню, указывающем на Компонент, мы использованием JMenu функцию GetInstance(), чтобы получить ссылку на объект $menu. Затем мы вызываем $menu функцию getActive(), чтобы получить ссылку на текущий пункт меню. Наконец, мы получаем ссылку на параметры объекта вызывая $menu функцию getParams() и передем $item переменную id. Как и в других параметрах, мы используем функцию get(), чтобы получить $currency с символом currency_symbol, по умолчанию $, если он не указан. Эта переменная затем присваивается ссылке на объект ReviewViewReview. Сам шаблон также нуждается в корректировке. Откройте /components/com_reviews/views/review/tmpl/default.php и замените строку с символом $ на выделенные строки:

<p class="contentheading">

<?php echo $this->review->name; ?>

</p>

<p class="createdate">

<?php echo $this->review->review_date; ?>

</p>

<p>

<?php echo $this->review->quicktake; ?>

</p>

<p><strong>Address:</strong> <?php echo $this->review->address; ?>

</p>

<p><strong>Cuisine:</strong> <?php echo $this->review->cuisine; ?>

</p>

<p><strong>Average dinner price:</strong>

<?php echo $this->currency,

$this->review->avg_dinner_price; ?>

</p>

<p><strong>Credit cards:</strong>

<?php echo $this->review->credit_cards; ?>

</p>

<p><strong>Reservations:</strong>

<?php echo $this->review->reservations; ?>

</p>

<p><strong>Smoking:</strong>

<?php echo $this->review->smoking ?>

</p>

<p>

<?php echo $this->review->review; ?>

</p>

<p><em>Notes:</em>

<?php echo $this->review->notes; ?>

</p>

<a href="<?php echo $this->backlink; ?>">< return to the

reviews</a>

<?php if(count($this->comments)) : ?>

<br /><br />

<?php foreach($this->comments as $comment): ?>

<p><strong><?php echo $comment->full_name; ?></strong> <em><?php

echo $comment->comment_date; ?></em></p>

<p><?php echo $comment->comment_text; ?></p>

<?php endforeach; ?>

<?php endif; ?>

<br /><br />

<?php echo $this->loadTemplate('form'); ?>

Вместе с ранее добавленными мы выводим переменную currency объекта view.

Сразу сделаем это же со средней ценой обеда в ресторане.

В дополнение ко всем Обзорам, мы хотим иметь возможность добавить ссылку на отдельные Обзоры. При ссылке на отдельные Обзоры, мы хотим также управлять денежной единицы. Для этого нам нужно создать metadata.xml в /components/com_reviews/views/review с таким кодом:

<?xml version="1.0" encoding="utf8"?>

<metadata>

<view title="Single Review">

<message>

<![CDATA[Shows individual reviews.]]>

</message>

</view>

<params>

<param name="id" type="text" size="3" default=""

label="Review ID" description="Enter the ID

of the review to be displayed." />

<param name="currency_symbol" type="text" size="3"

default="$" label="Currency Symbol"

description="Enter the currency symbol to

be used for average dinner prices." />

</params>

</metadata>

Эта конфигурация XML похожа на ту, что мы использовали для всех Обзоров. Но, главное отличие в дополнительном параметре, где администратор может добавить ID конкретного Обзора, что будет отображаться. При создании новой ссылки меню, используйте Single Review внутри Restaurant Reviews. Вы должны получить окно параметров, которое выглядит как на рисунке. Получите Review ID для Обзора, на который вы хотите перейти по ссылке и введите его в это поле.

Хотя мы и не будем делать какие-либо изменения в классе display, все же нужно изменить конструктор для обнаружения установки ID в параметрах пункта меню. Откройте /components/com_reviews/models/review.php и замените функцию __construct() на такой код:

function __construct()

{

parent::__construct();

$params =& JSiteHelper::getMenuParams();

$id = $params->get('id', 0);

if(!$id)

{

$id = JRequest::getVar('id', '');

}

$this->_id = $id;

}

Как и в предыдущей версии __construct(), мы вызываем конструктор родителя JModel чтобы добавить некоторые шаги в процесс инициализации класса, а не для замены его. Затем мы получаем ссылку на параметры текущего пункта меню, используя JSiteHelper функцию getMenuParams(). Мы захватываем значение ID параметр в $id, по умолчанию 0. Значение $id проверяется: если 0, мы попытаемся получить id из переменных запроса, по умолчанию null, если он не существует. Наконец, присваиваем переменной объекта _id значение $id. После сохранения модели в ИП перейдите по созданной ссылке для отдельного Обзора. Ваш экран должен выглядеть так:

Резюме

Благодаря XML-файлам конфигурации мы смогли добавить несколько опций, не создавая отдельные таблицы для их хранения. Параметры были добавлены в Модули, Плагины, Компоненты и Виды с минимальным обновлением кода. Администраторы сайта теперь могут использовать знакомые элементы управления, позволяющие управлять этими параметрами

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]