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

Управление публикацией Обзоров

Когда мы построили элементы управления для Обзора Компонентов в ИА, был создан список экран, где администраторы могли выбирать существующий Обзор для редактирования. В дальней правой части экрана, есть колонка под названием Опубликовано (Published), которая показывает текущее состояние публикации каждого Обзора.

Иконки здесь на самом деле кнопки, которые предназначены для переключения между публикацией и ее отменой. Если нажать на одну из этих кнопок сейчас, значок не меняется, т.к. мы еще не добавили соответствующий код. Кнопки Публикация и Отмена (Publish и Unpublish) на ПИ, также не функционируют. Чтобы исправить это, мы добавим функцию publish() для Контроллера в ИА и зарегистрируем задачу unpublish с его помощью:

function __construct( $default = array() )

{

parent::__construct( $default );

$this->registerTask( 'add' , 'edit' );

$this->registerTask( 'apply', 'save' );

$this->registerTask( 'unpublish', 'publish' );

}

function publish()

{

global $option;

$cid = JRequest::getVar( 'cid', array(), '', 'array' );

if( $this->_task == 'publish')

{

$publish = 1;

}

else

{

$publish = 0;

}

$reviewTable =& JTable::getInstance('review', 'Table');

$reviewTable->publish($cid, $publish);

$this->setRedirect( 'index.php?option=' . $option );

}

Как и функция edit(), функция publish() подключает текущий объект БД JFactory:: getDBO() и получает cid массив из нашей формы. Поскольку функция может обрабатывать задачи как публикации, так и отмену публикации, мы проверяем переменную _task Контроллера, чтобы определить, что в настоящее время делать. Исходя из этого, мы устанавливаем $publish в 1 или 0. Далее, reviewTable ссылаемся на экземпляр класса ReviewTable. Используя $reviewTable функцию publish(), получаем в массив ID Обзоров и устанавливаем значение для столбца Published, что хранится в БД. Наконец, Контроллер возвращает нас обратно в главное меню Компонента.

Теперь иконки переключения публикации любых Обзоров в списке должны работать

Добавление постраничной навигации

Как только наши обозреватели добавят слишком много Обзоров ресторанов, список станет весьма длинным. Было бы полезно разделить его на несколько экранов. Так, как это делают поисковые системы, которые обычно показывают десять или двадцать результатов за раз. Функциональность и интерфейс постраничной навигации встроен в Joomla! и его легко добавить. Для начала, мы добавим нумерацию страниц в менеджер Обзора в ИА. Списки Обзоров разделятся на несколько страниц и будут созданы ссылки для перемещения между ними. Откройте /administrator/components/com_reviews/controller.php и сделайте изменения в функции showReviews () (выделенный код):

function showReviews()

{

global $option, $mainframe;

$limit = JRequest::getVar('limit',

$mainframe->getCfg('list_limit'));

$limitstart = JRequest::getVar('limitstart', 0);

$db =& JFactory::getDBO();

$query = "SELECT count(*) FROM #__reviews";

$db->setQuery( $query );

$total = $db->loadResult();

$query = "SELECT * FROM #__reviews";

$db->setQuery( $query, $limitstart, $limit );

$rows = $db->loadObjectList();

if ($db->getErrorNum()) {

echo $db->stderr();

return false;

}

jimport('joomla.html.pagination');

$pageNav = new JPagination($total, $limitstart, $limit);

HTML_reviews::showReviews( $option, $rows, $pageNav );

}

Переменные $limit и $limitstart представляют количество выводимых записей для просмотра и номер начальной записи. Если $limit не определен в запросе, мы берем его из конфигурации Joomla!. Чтобы правильно рассчитать количество страниц, которые будут созданы, нам нужно общее число строк в наборе. Для этого назначаем переменную $total. В результат запроса мы хотим получить столько строк, сколько собираемся показывать. Для этого используются второй и третий параметры setQuery(). Соответствующий SQL запрос в БД создается автоматически.

Наконец, мы импортируем библиотеку, которая генерирует HTML-разбиение на страницы и получаем экземпляр класса JPagination чтобы установить диапазон и $total. Этот объект передается в HTML_reviews::showReviews(), который необходимо несколько изменить, чтобы сделать возможным его использование. Открываем admin.reviews.html.php и находим функцию showReviews(). Для отображения нумерации страниц необходимо сделать всего две небольшие модификации кода, как выделено ниже:

function showReviews( $option, &$rows, &$pageNav )

{

?>

<form action="index.php" method="post" name="adminForm">

<table class="adminlist">

<thead>

<tr>

<th width="20">

<input type="checkbox" name="toggle" value=""

onclick="checkAll(<?php echo count( $rows ); ?>);" />

</th>

<th class="title">Name</th>

<th width="15%">Address</th>

<th width="10%">Reservations</th>

<th width="10%">Cuisine</th>

<th width="10%">Credit Cards</th>

<th width="5%" nowrap="nowrap">Published</th>

</tr>

</thead>

<?php

jimport('joomla.filter.output');

$k = 0;

for ($i=0, $n=count( $rows ); $i < $n; $i++) {

$row = &$rows[$i];

$checked = JHTML::_('grid.id', $i, $row->id );

$published = JCommonHTML::PublishedProcessing( $row, $i );

$link = JOutputFilter::ampReplace( 'index.php?option=' .

$option . '&task=edit&cid[]='. $row->id );

?>

<tr class="<?php echo "row$k"; ?>">

<td><?php echo $checked; ?></td>

<td><a href="<?php echo $link; ?>">

<?php echo $row->name; ?></a></td>

<td><?php echo $row->address; ?></td>

<td><?php echo $row->reservations; ?></td>

<td><?php echo $row->cuisine; ?></td>

<td><?php echo $row->credit_cards; ?></td>

<td align="center"><?php echo $published;?></td>

</tr>

<?php

$k = 1 - $k;

}

?>

<tfoot>

<td colspan="7">

<?php echo $pageNav->getListFooter(); ?></td>

</tfoot>

</table>

<input type="hidden" name="option" value="<?php echo $option;?>" />

<input type="hidden" name="task" value="" />

<input type="hidden" name="boxchecked" value="0" />

</form>

<?php

}

Вызов $pageNav функции getListFooter() возвращает HTML ссылки на каждую из страниц списка Обзоров. Текущая страница выделена, но не имеет ссылки. Выводится выпадающий список для выбора отображаемого количества строк. Теперь ваш экран должен выглядеть примерно так. Желательно добавить Обзоры, чтобы у вас их было, по крайней мере, шесть

По умолчанию, вероятно у Вас установлено 20 строк для отображения. Выберите 5 из выпадающего списка, и вы увидите такой экран:

Нажатие на любой кнопку Next или End – должен появиться экран с оставшимися записями:

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