Bazı önkoşullar vardır ve görünüm şablonunuzda bazı değişiklikler yapmanız gerekir. Ancak bu özelliği tek başına geliştirmek zorunda değilsiniz.
Ön şartlar
- Veritabanı tablonuza INT türünde bir sütun sırası gerekir
- Liste görünümünüz zaten sıralanabilir olmalıdır (tablo sütun başlıklarını tıklayarak)
Değişiklikler
Bu, tablo satırlarınızı sürükle ve bırak yöntemiyle sıralanabilir hale getirmenin en önemli parçasıdır:
JHtml::_('sortablelist.sortable', 'itemList', 'adminForm', strtolower($listDirn), $saveOrderingUrl);
Tablo veritabanı tablosu sütun göre sıralanır eğer (yani yukarıdaki satırı yürütmek) sadece aktif hale gerektiğini sipariş . Tablonuzun hangi sütuna ve hangi yöne (ASC veya DESC) göre sıralandığını bulmanız gerekir. Bunu default.php dosyanızın başında yapın:
$listOrder = $this->escape($this->state->get('list.ordering'));
$listDirn = $this->escape($this->state->get('list.direction'));
Tablonuzun sütun sıralamasına göre sıralanıp sıralanmadığını kontrol edin
$saveOrder = $listOrder == 'a.ordering';
$ SaveOrder doğruysa, tablo satırlarınızı sürükleyip bırakarak sıralanabilir yapın. Com_example öğesini bileşen adınızla ve task = items.saveOrderAjax içindeki "öğeler" yerine liste denetleyicinizin adıyla değiştirin:
if ($saveOrder)
{
$saveOrderingUrl = 'index.php?option=com_example&task=items.saveOrderAjax&tmpl=component';
JHtml::_('sortablelist.sortable', 'itemList', 'adminForm', strtolower($listDirn), $saveOrderingUrl);
}
$ SaveOrderingUrl Bir öğeyi damla AJAX her şey aracılığıyla çağrılır. Denetleyiciniz doğru Joomla MVC sınıfını (JControllerAdmin) genişletiyorsa, bu yöntem sizin için otomatik olarak kullanılabilir. itemList , HTML tablonuzun kimliğidir ve adminForm , HTML formunuzun adıdır (veya emin değilim):
<form action="<?php echo JRoute::_('index.php?option=com_example&view=items'); ?>" method="post" name="adminForm" id="adminForm">
...
<table class="table table-striped" id="itemList">
...
</table>
...
</form>
HTML tablonuzda yeni bir sütuna ihtiyacınız olacak. Ekran görüntünüzde en soldaki sütun. Tablo sütun başlığı şuna benzer:
<th width="1%" class="nowrap center hidden-phone">
<?php echo JHtml::_('searchtools.sort', '', 'a.ordering', $listDirn, $listOrder, null, 'asc', 'JGRID_HEADING_ORDERING', 'icon-menu-2'); ?>
</th>
Tablo gövdesiniz için büyük olasılıkla tüm liste öğelerinizde bir foreach döngüsüne sahip olursunuz. HTML tablonuzun her satırındaki ilk hücre, sürükleme simgesi olacaktır. Sürükle ve bırak özelliğini devre dışı bıraktıysanız (tablonuz sipariş edilerek sipariş edilmediğinden ) simgeyi devre dışı bırakmanız ve bir ipucu oluşturmanız gerekir:
<tbody>
<?php foreach ($this->items as $i => $item) :
$ordering = ($listOrder == 'ordering');
?>
<tr class="row<?php echo $i % 2; ?>">
<td class="order nowrap center hidden-phone">
<?php
$iconClass = '';
if (!$saveOrder) {
$iconClass = ' inactive tip-top hasTooltip" title="' . JHtml::tooltipText('JORDERINGDISABLED');
}
?>
<span class="sortable-handler <?php echo $iconClass ?>">
<span class="icon-menu"></span>
</span>
<?php if ($saveOrder) : ?>
<input type="text" style="display:none" name="order[]" size="5" value="<?php echo $item->ordering; ?>" class="width-20 text-area-order " />
<?php endif; ?>
</td>
...
</tbody>