घटक में ड्रैग-एन-ड्रॉप ऑर्डर जोड़ना


13

मैंने जूमला हैलो वर्ल्ड ट्यूटोरियल के आधार पर एक छोटा घटक विकसित किया है, और अब मैं उसी ड्रैग-एन-ड्रॉप को फिर से लागू करना चाहूंगा जिसमें कई अन्य जूमला घटक शामिल हैं:

यहाँ छवि विवरण दर्ज करें

पहले कॉलम को छाँटकर, स्थिति बदलने के लिए प्रत्येक तालिका पंक्ति को खींचना संभव है।

क्या जूमला में इस कार्यक्षमता को जोड़ने का एक मूल तरीका है, या क्या मुझे इसे स्वयं प्रोग्राम करना है?

सही दिशा में किसी भी कुहनी की सराहना की।

जवाबों:


16

कुछ पूर्वापेक्षाएँ हैं और आपको अपने दृश्य टेम्पलेट में कुछ संशोधन करने होंगे। लेकिन आपको यह सुविधा अपने दम पर विकसित करने की आवश्यकता नहीं है।

आवश्यक शर्तें

  • आपको अपने डेटाबेस तालिका में टाइप 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>

धन्यवाद, बहुत अच्छा और व्यापक जवाब। मैं वास्तव में इसे अभी तक काम करने में कामयाब नहीं हुआ हूं, लेकिन मैं करीब आ रहा हूं :)
बोगोवो

यदि आपके कोई प्रश्न हैं या यदि मेरे गाइड में कुछ गलत है या सुधार की आवश्यकता है, तो कृपया मुझे बताएं।
फ्रुप्पेल

मैं समझ गया! मैं बदलने के लिए भूल गया task=items.saveOrderAjaxकरने के लिए task=myviews.saveOrderAjax। अब यह ठीक काम कर रहा है।
बोगोवो

Drag'n'Drop सॉर्टिंग को सर्चटूल के साथ जोड़ा जाता है। यदि आपने खोज लेखों को (लेखों की तरह) लागू नहीं किया है, तो ड्रैगनेनड्रॉप लिंक द्वारा छांटना काम नहीं करता है।
डेनिस हीडेन

यहाँ कुछ याद आ रहा है। मैं टेबल आइटम नहीं खींच सकता और ऑर्डर करने वाले कॉलम को भी सॉर्ट नहीं कर सकता।
TIIUNDER
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.