Добавление сортировки столбцов таблицы в компонент

Учитывая, что у вас есть таблица данных, уже в компоненте, как сделать некоторые, или все столбцы таблицы сортировки, как и многие из них находятся в Joomla администратора? Это не особенно трудно сделать, но Есть несколько шагов, необходимых и подробности вы должны быть осведомлены о так что все сходится правильно. Есть вариации на процедурой, приведенной здесь и как только вы уверены, что вы понимаете, как все это работает, Вы должны чувствовать себя свободно исследовать другие возможности, которые могут подойти вашим целей лучше.

Эта процедура предполагает, что ваш компонент структурирован в соответствии с Model-View-Controller (MVC) шаблон проектирования. Общая идея процедура будет по-прежнему применяться к не-MVC компонент если применить немного фантазии!

 

Шаг 1: модель

Первое, что нужно добавить filter_order и filter_order_Dir запрос в __construct () функцию. Если вы использовали JPagination, этот шаг будет уже вам знакомы. "Default_column_name" Изменить на имя столбца, который нужно использовать в качестве сортировки по умолчанию, и менять фильтр направлении порядку, если вы хотите добавить эту информацию состояние объекта здесь страхует его доступным для всех код, который может в ней нуждается.

function __construct()
{
parent::__construct();

global $mainframe, $option;

$filter_order = $mainframe->getUserStateFromRequest( $option.'filter_order', 'filter_order', 'default_column_name', 'cmd' );
$filter_order_Dir = $mainframe->getUserStateFromRequest( $option.'filter_order_Dir', 'filter_order_Dir', 'asc', 'word' );

$this->setState('filter_order', $filter_order);
$this->setState('filter_order_Dir', $filter_order_Dir);
}

В модели, которая генерирует данные, которые лягут в таблице, необходимо внести изменения в метод, который создает запрос к базе данных, которая будет использоваться для заполнения таблицы. Чаще всего это GetData () метод, но не может быть; Прибытие чтобы увидеть, какой метод фактически используется.

Модель может извлекать данные из любой, но не должны быть базы данных, но в подавляющем большинстве случаев модель будет использовать базу данных Joomla API представить SQL запросов к базе данных. Предполагая, что будет так, то вам нужно настроить запрос, чтобы сортировать параметры принимаются во внимание.

Эта информация вызывается любыми функция строит предложение ORDER BY, как правило, частные функции следующим образом:

 

function _buildContentOrderBy()
{
global $mainframe, $option;

$orderby = '';
$filter_order = $this->getState('filter_order');
$filter_order_Dir = $this->getState('filter_order_Dir');

/* Error handling is never a bad thing*/
if(!empty($filter_order) && !empty($filter_order_Dir) ){
$orderby = ' ORDER BY '.$filter_order.' '.$filter_order_Dir;
}

return $orderby;
}

Шаг 2: мнение

Сформировав сортировки переменных в модели, необходимо назначить их просмотра так, что они появляются на странице, когда оно появится.

Для этого необходимо добавить несколько строк кода на ваш взг

 

  function display($tpl = null)
{

// Get data from the model
$items = & $this->get( 'Data');
$this->assignRef('items', $items);

/* Call the state object */
$state =& $this->get( 'state' );

/* Get the values from the state object that were inserted in the model's construct function */
$lists['order_Dir'] = $state->get( 'filter_order_Dir' );
$lists['order'] = $state->get( 'filter_order' );

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

parent::display($tpl);
}

Шаг 3: Файл компонента макета

Теперь вам нужно добавить некоторые элементы в компонент файла макета. В таблице должны быть включены в форму. Это уже может быть случай, как, например, вы, возможно, уже реализованы нумерацией страниц или фильтрация на стол. Но если в таблице еще не в форме, то сейчас самое время, чтобы обернуть его в <form> и </ FORM> теги. Причина
того, что форма требуется в том, что сортировки столбцов полагаться на
немного JavaScript, который будет представлять формы с параметры
сортировки добавил.
Естественно, это будет связано загрузки страницы, так что если вы предпочитаете AJAX-решение, то эта процедура не для вас.

Форму теги будут выглядеть примерно так:

<form id="adminForm" action="<?php echo JRoute::_( 'index.php' );?>" method="post" name="adminForm">

.... table goes here ....

</form>

Обратите внимание, что имя формы должны быть "adminForm". Возможно, вам придется настроить действия URL в некоторых случаях.

Кроме того, необходимо добавить несколько скрытых полей в форме. Их можно разместить в любом месте между <form> и </ FORM>, но

обычно они находятся как раз перед закрытием тега, например:

 

<form id="adminForm" action="<?php echo JRoute::_( 'index.php' );?>" method="post" name="adminForm">

.... table goes here ....

<input type="hidden" name="filter_order" value="<?php echo $this->lists['order']; ?>" />
<input type="hidden" name="filter_order_Dir" value="<?php echo $this->lists['order_Dir']; ?>" />
</form>

Теперь посмотрим на саму таблицу. Возможно, вам придется стол со статическим заголовки уже, глядя неопределенно так:

<tr>
<th>Name</th>
<th>Description</th>
</tr>

Вам необходимо заменить статические имена столбцов с призывами к Joomla  JHTML статического класса, так что ваш код будет выглядеть примерно так:

<tr>
<th><?php echo JHTML::_( 'grid.sort', 'Name', 'DbNameColumn', $this->lists['order_Dir'], $this->lists['order']); ?></th>
<th><?php echo JHTML::_( 'grid.sort', 'Description', 'DbDescriptionColumn', $this->lists['order_Dir'], $this->lists['order']); ?></th>
</tr>

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

1. Должно быть "grid.sort так, чтобы JHTML будет вставлять правильного поведения для сортировки столбцов.

2. Это имя столбца, что ваши посетители будут видеть. Вы должны изменить это для вашего столбцов таблицы.

3. Это имя соответствующего поля базы данных (колонка), который должен быть отсортирован по. Это будет передана модель, скорее всего, поэтому он может быть добавлен в "ORDER BY", содержащейся в заявлении запросов SQL.

4. Должно быть именно так, как показано здесь. Это направление тока порядке (по возрастанию или убыванию) и поставляется с точки зрения (см. ниже).

5. Должно быть именно так, как показано здесь. Это имя столбца, таблицы отсортированы по и поставляется с точки зрения (см. ниже).

Короче говоря, вам необходимо изменить Второй и третий аргументы для каждого вызова JHTML надлежащим образом.

Наконец, если ваш сортировки таблицы будет в передний конец вашего сайта, то вам нужно добавить немного фрагмент JavaScript для макета. Кроме того, вы можете добавить его к представлению кода (с использованием JDocument-> addScriptDeclaration), если вы предпочитаете держать ваш JavaScript кода в разделе HTML <head>.

 

<script language="javascript" type="text/javascript">
function tableOrdering( order, dir, task )
{
var form = document.adminForm;

form.filter_order.value = order;
form.filter_order_Dir.value = dir;
document.adminForm.submit( task );
}
</script>

Вам не нужно добавлять этот код, если ваш сортировки таблицы в администратора, как этот код загружается для вас автоматически в любом случае.

На этом изменения необходимо внести в макет. JHTML grid.sort Теперь добавим вызов tableOrdering функция, так что

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

Шаг 4: Styling результат

Наконец-то. Вы можете применить немного CSS стиль для того чтобы результат немного более привлекательным.

Выбор сортировки столбцов может быть сделано только через их контекст, так что вы, вероятно, необходимо добавить CSS класс для <table>, <tr> или <th> тегов. Это то, что выход может выглядеть с класса добавляется тег:

 

<tr class="sortable">
<th><a href="javascript:tableOrdering('DbName','asc','');" title="Click to sort by this column">Training provider</a></th>
<th><a href="javascript:tableOrdering('DbDescription','asc','');" title="Click to sort by this column">Location</a></th>
</tr>

Чтобы добавить немного пространства между именем столбца и по возрастанию / убыванию индикатор изображение (общие требования), вы могли бы применить CSS следующим образом:

tr.sortable th img {
margin-left: 5px;
}

http://www.9999p.ru/



Добавление сортировки столбцов таблицы в компонент - Генератор расширений Joomla и многое другое на нашем сайте посвященном работе расширений, компонентов, модулей, плагинов для линейки Joomla. Отправляйте ссылку на страницу своим друзьям и в социальные сети воспользовавшись графическими иконками выше.

Блог

Календарь приёма объявлений

Небольшой пример из повседневной практики. Организация меняет реквизиты, и они вступят в силу через  пару недель. На сайте идет приём объявлений и объявления принимаются на несколько месяцев в...

Дырка в com_content

Сегодня у товарища, сайт которого находится на старой  Joomla 1.0.3, была сильная нагрузка на сервере, просматривая логи обнаружил не вежливый запрос такого порядка: http://сайт/index2...

Лечим вирус на сайте

  Первоначальный осмотр сайта обнаружил, что у клиента закрыт доступ по фтп, что сузило круг подозреваемых уязвимостей, стало быть отверстие в какомто скрипте движка joomla. Касперский яро...

Troj/JSRedir-MH

Снова грянул гром зарежения сайтов новым вирусом  Troj/JSRedir-MH.  И так в коротко по вирусу Troj/JSRedir-MH. Вирус или троян куда интереснее чем свои предшествиники, тепер...

Доработка расширения для рассылки Send Email JK

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

Привет Ie 10 регулярка

И вот и мне пришлось столкнулся с проблемами перехода на win 8 в придачу с ie 10, некоторых постоянных пользователей моих сайтов. На многих сайтах  имеющих раздел по приёму объявлений, использ...

Kunena заменяем ссылку на профиль пользователя

Всем привет, снова снова кунена, получил задание на допиливание популярного форума Kunena, сегодня потребовалось поменять ссылку на профиль пользователя. Это связано с тем, что на сайте стоит социа...

Работает на Kunena - зачем на каждой странице?

  Все у кого стоит форум kunena мешает надпись с двумя ссылкам внизу форума "Работает на Kunena". Сея надпись висит на каждой странице форма, а также страница разработчиков содержит множество вн...

Kunena избавимся от лишних quote

Для тех кто действительно делает сайт для людей, моя следующая заметка. Расскажу вам, как избавиться от лишних quote в постах на форуме kunena. У меня несколько тематических сайтов с нормальной посеща...

Kunena решаем проблему с пропажей аватаров

Так и вот мы обновись до последней версии кунены, сразу видно компонент внутри сильно изменился, и вот незадача у некоторых пользователей пропали аватары, физически они есть но неотображаются. ...

Джомлавикам

Обработка параметров расширений joomla

При разработке расширений для CMS Joomla, таких как плагины, модули, компоненты или шаблоны, часто возникает необходимость получить параметры разрабатываемого или любого другого расширения. В этой ...

Кunena крамсаем шаблон

1. В папке \components\com_kunena\template\ваш_шаблон\ находим файл template.xml и вставляем в него такой кусок (чтобы была возможность выбора показывать это поле или нет): <param name="l...

Подключить свои классы и методы в Joomla?

Иногда случается, что набор собственных функций или библиотек нужно подключить в Joomla. Но иногда подключить их нужно так, чтобы они присутсвовали во всей системе, вне зависимо...

3 новых полезных класса в Joomla 2.5

В платформе Joomla 11.3 разработчики добавлил несколько полезных новых классов для разработчиков. Рассмотрю некоторый из них - JGrid (для построения HTML таблиц), JWebClient (для получения информац...

Репозиторий файлов на Joomla средствами Apache

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