Bileşene sürükleyip bırakma sırası ekleme


13

Joomla Hello World eğitimine dayalı küçük bir bileşen geliştirdim ve şimdi diğer birçok Joomla bileşeninin içerdiği aynı sürükle-bırak yeniden sıralamasını uygulamak istiyorum:

resim açıklamasını buraya girin

İlk sütuna göre sıralayarak, konumu değiştirmek için her tablo satırını sürüklemek mümkündür.

Bu işlevi Joomla'ya eklemenin yerel bir yolu var mı, yoksa bunu kendim programlamak zorunda mıyım?

Doğru yönde herhangi bir dürtme takdir.

Yanıtlar:


16

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>

Teşekkür ederim, çok güzel ve kapsamlı bir cevap. Aslında henüz işe
koymayı başaramadım

Herhangi bir sorunuz varsa veya rehberimde yanlış veya iyileştirilmesi gereken bir şey varsa lütfen bana bildirin.
fruppel

Anladım! Değişmek unuttum task=items.saveOrderAjaxiçin task=myviews.saveOrderAjax. Şimdi iyi çalışıyor.
15:15

Drag'n'Drop sıralaması arama araçlarıyla bağlantılıdır. Arama araçları uygulanmadıysanız (makalelerde olduğu gibi) drag'n'drop ile sıralanabilir bağlantı çalışmaz.
Dennis Heiden

Burada bir şey kayıp. Tablo öğelerini sürükleyemiyorum ve ayrıca sipariş sütununu sıralayamıyorum.
TIIUNDER
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.