कुछ पूर्वापेक्षाएँ हैं और आपको अपने दृश्य टेम्पलेट में कुछ संशोधन करने होंगे। लेकिन आपको यह सुविधा अपने दम पर विकसित करने की आवश्यकता नहीं है।
आवश्यक शर्तें
- आपको अपने डेटाबेस तालिका में टाइप INT का कॉलम ऑर्डर करने की आवश्यकता है
- आपकी सूची दृश्य पहले से ही क्रमबद्ध होनी चाहिए (तालिका स्तंभ शीर्ष लेख पर क्लिक करके)
संशोधन
अपनी तालिका पंक्तियों को ड्रैग और ड्रॉप द्वारा क्रमबद्ध बनाने के लिए यह सबसे महत्वपूर्ण हिस्सा है:
JHtml::_('sortablelist.sortable', 'itemList', 'adminForm', strtolower($listDirn), $saveOrderingUrl);
यदि आपकी तालिका डेटाबेस तालिका स्तंभ क्रम से क्रमबद्ध है, तो आपको केवल सक्रिय होना चाहिए (अर्थात उपरोक्त पंक्ति निष्पादित करें) । आपको यह पता लगाने की आवश्यकता है कि आपकी तालिका किस कॉलम और किस दिशा (ASC या DESC) में सॉर्ट की गई है। इसे अपने default.php की शुरुआत में करें:
$listOrder = $this->escape($this->state->get('list.ordering'));
$listDirn = $this->escape($this->state->get('list.direction'));
जाँच करें कि क्या आपकी तालिका कॉलम ऑर्डर करके आर्डर की गई है
$saveOrder = $listOrder == 'a.ordering';
अपनी टेबल पंक्तियों को ड्रैग करके छांटें और अगर $ saveOrder सच है तो ड्रॉप करें। अपने घटक नाम के साथ com_example बदलें और कार्य में "आइटम" = items.saveOrderAjax अपनी सूची नियंत्रक के नाम के साथ:
if ($saveOrder)
{
$saveOrderingUrl = 'index.php?option=com_example&task=items.saveOrderAjax&tmpl=component';
JHtml::_('sortablelist.sortable', 'itemList', 'adminForm', strtolower($listDirn), $saveOrderingUrl);
}
$ SaveOrderingUrl AJAX हर आप किसी आइटम ड्रॉप के माध्यम से बुलाया जाएगा। यदि आपका नियंत्रक सही Joomla MVC वर्ग (JControllerAdmin) का विस्तार कर रहा है, तो यह विधि आपके लिए स्वचालित रूप से उपलब्ध है। आइटमलिस्ट आपके HTML तालिका की आईडी है, और adminForm आपके HTML फॉर्म का नाम (या आईडी, निश्चित नहीं है):
<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 तालिका में एक नए कॉलम की आवश्यकता होगी। आपके स्क्रीनशॉट में यह कॉलम बहुत दूर है। तालिका स्तंभ शीर्ष लेख इस तरह दिखता है:
<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>
आपके टेबल बॉडी के लिए आपके पास सबसे अधिक संभावना है कि आपके सभी सूची आइटमों के माध्यम से एक फ़ॉरच लूप हो। आपकी HTML तालिका की प्रत्येक पंक्ति में पहली सेल वह ड्रैग आइकन होगी। यदि आपके पास ड्रैग और ड्रॉप डिसेबल है (क्योंकि आपकी टेबल ऑर्डर करके ऑर्डर नहीं की गई है ) तो आपको आइकन को निष्क्रिय करना चाहिए और टूलटिप बनाना चाहिए:
<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>