Конечно, но оговорюсь что у каждого структура своя.
1. создаём в таблице поле ordering параметр integer (int)
2. Открываем шаблон, default.php и туда пишем строчки. заголовки
</th>
<th width="8%" nowrap="nowrap">
<?php echo JHTML::_('grid.sort', 'Order', 'a.ordering', $this->lists['order_Dir'], $this->lists['order'] ); ?>
<?php if ($ordering) echo JHTML::_('grid.order', $this->items ); ?>
</th>
Первое это сортировка а второе это кнопка сохранить. Дальше в шаблоне пишем
<td class="order">
<?php $disabled = $ordering ? '' : 'disabled="disabled"'; ?>
<input type="text" name="order[]" size="5" value="<?php echo $row->ordering;?>" <?php echo $disabled ?> class="text_area" style="text-align: center" />
</td>
disabled когда вы войдёте в компонент кнопки не будет и поля будут неактивны. но данные будут выводиться.
Следующие тоже пишем в шаблоне! Признаюсь честно незнаю почему в шаблоне я пытался в вид затолкать но не получилось. вообщем это и есть сама кнопка сохранить её ставим в самом начале формы
<?php
//Этот параметр для отображения позиции.
$ordering = ($this->lists['order'] == 'a.ordering');
?>
3. Открываем view.html.php и в нём пишем перед parent::display($tpl);
$lists['order_Dir'] = $filter_order_Dir;
$lists['order'] = $filter_order;
$this->assignRef('lists', $lists);
Это мы передаём данные в вид из модели.
4. Открываем контроллер у меня он называется priceleaf.php это не тот контроллер который лежит в корне компонента. у меня он лежит в папке controllers. в нём у меня описываются действия для кнопок сохранить удалить применить и так далее. И в нём пишем функцию для сохранения. незабудьте в ней поменять название своей модели $model = $this->getModel('priceleaf');.
function saveorder()
{
// Check for request forgeries
JRequest::checkToken() or jexit( 'Invalid Token' );
$cid = JRequest::getVar( 'cid', array(), 'post', 'array' );
$order = JRequest::getVar( 'order', array(), 'post', 'array' );
JArrayHelper::toInteger($cid);
JArrayHelper::toInteger($order);
$model = $this->getModel('priceleaf');
$model->saveorder($cid, $order);
$msg = JText::_( 'NEW ORDERING SAVED' );
$this->setRedirect( 'index.php?option=com_priceleaf', $msg );
}
5. Теперь модель через неё нужно записать наши данные. у меня файл priceleaf.php В ней пишем функцию
function saveorder($cid = array(), $order)
{
$row =& $this->getTable();
$groupings = array();
// update ordering values
for( $i=0; $i < count($cid); $i++ )
{
$row->load( (int) $cid[$i] );
// track categories
$groupings[] = $row->catid;
if ($row->ordering != $order[$i])
{
$row->ordering = $order[$i];
if (!$row->store()) {
$this->setError($this->_db->getErrorMsg());
return false;
}
}
}
// execute updateOrder for each parent group
$groupings = array_unique( $groupings );
foreach ($groupings as $group){
$row->reorder('catid = '.(int) $group);
}
return true;
}
6. Финишная в папке tables у меня лежит файл priceleaf.php в нём пишем следующее
var $ordering = null;
В этом файле мы определяем с какими данными мы будем работать. Приведу пример всего файла.
<?php
//Защита от прямого обращения к скрипту
//Определяем с какими переменными из базы будем работать.
class TablePriceleaf extends JTable
{
var $id = null;
var $name = null;
var $published = null;
var $ordering = null;
function TablePriceleaf(& $db) {
parent::__construct('#__priceleaf_razdel', 'id', $db);
}
}
Вот и всё! после этого должно всё работать. Но я уверен что не у всех заработает, так как тут может быть несколько причин у вас другая структура, у вас не написан _buildQuery вы не поставили свою модель как я писал. Но заметьте что у вас не будет стрелочек которые будут смещать порядок сортировки. Я их убрал от туда. Так как не смог доконца понять как с ними работать, я нашёл функции и всё остальное но они не работали бился бился но не получилось увы. Но я был рад и тому что в этом смог сам разобраться. Как я понял что бы эти кнопки работали (вывод из компоненты ссылки родной джумловский) Они должны быть привязаны к какойто категории или что то в этом роде, так как в базе записи местами не поменяешь. Ну и что бы это работало на сайте впрочем если вы разберётесь то я вам скажу как сделать сортировку на сайте что бы ваш параметр ордеринг работал (там есть подвох который я случайно узнал, если бы не один момент я бы долго пытался понять в чём проблема). Надеюсь Вам поможет удачи.
P.S Всё сделано из ручного просмотра сторонних компонентов и метода тыка.