0 Пользователей и 1 Гость просматривают эту тему.
  • 11 Ответов
  • 1039 Просмотров
*

AlekVolsk

  • Профи
  • 6312
  • 336
Самописный компонент. В таблице в базе имеется поле `ordering` int not null для ручного указания порядка вывода данных, которое по умолчанию при добавлении новой записи имеет значение 0.
В админке в списке поле выводится как на скрине:


Вывожу так:
Код: html4strict
<?php
$saveOrder = $listOrder == 'ordering';
if ($saveOrder) {
  $saveOrderingUrl = 'index.php?option=com_teaching_staff&view=listitems.saveOrderAjax&tmpl=component';
  JHtml::_('sortablelist.sortable', 'articleList', 'adminForm', strtolower($listDirn), $saveOrderingUrl);
}
?>
        <td class="order nowrap center hidden-phone">
        <?php
          if ($canChange) {
            $disableClassName = '';
            $disabledLabel = '';
            if (!$saveOrder) {
              $disabledLabel = JText::_('JORDERINGDISABLED');
              $disableClassName = 'inactive tip-top';
            }
          ?>
            <span class="sortable-handler <?php echo $disableClassName; ?>" title="<?php echo $disabledLabel; ?>" rel="tooltip"><i class="icon-menu"></i></span>
            <input type="text" style="display:none;" name="order[]" size="5" value="<?php echo $item->ordering; ?>" class="width-20 text-area-order" />
          <?php } else { ?>
            <span class="sortable-handler inactive"><i class="icon-menu"></i></span>
          <?php } ?>
        </td>

В контроллере:
Код: php
  public function saveOrderAjax() {
    $pks = $this->input->post->get('cid', array(), 'array');
    $order = $this->input->post->get('order', array(), 'array');
    JArrayHelper::toInteger($pks);
    JArrayHelper::toInteger($order);
    $model = $this->getModel();
    $return = $model->saveorder($pks, $order);
    if ($return) echo '1';
    JFactory::getApplication()->close();
  }

Есс-но, если я перетаскиваю строки вверх/вниз, то значение поля в записях не меняется.

Я так понял, вся реализация должна быть в модели, в функции saveorder(), но ее пример нашел только в com_users/models/levels.php, из которого ничего толком не понял.

Как правильно реализовать подобный функционал, чтобы потом во фронте иметь возможность выводить данные с сортировкой по данному полю?
« Последнее редактирование: 25.03.2015, 18:51:56 от b2z »
*

shurakana

  • Завсегдатай
  • 793
  • 43
UPD По какому то порядку они же выводятся в админке, может ошибка как раз в том, что по умолчанию там 0?
Может при добавлении записи сделать подсчет всех добавленных записей в этой таблице, затем делать к подсчету +1, и уже добавлять к только что созданной записи.

Таким образом сортировка заготовлена, потом на окончание события "перетаскивания", повесить функцию сохранения в бд.
Ну это уже все ручками своими..)

А по идее, это вроде же встроенная фишка Joomla, перетаскивание и сохранение, инклюдится откуда то, и если Неправильно работает, возможно ошибся где то при создании компонента.

Спойлер
[свернуть]
« Последнее редактирование: 25.03.2015, 16:50:59 от shurakana »
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

AlekVolsk

  • Профи
  • 6312
  • 336
В консоли руганутся на это:
$saveOrderingUrl = 'index.php?option=com_teaching_staff&view=listitems.saveOrderAjax&tmpl=component';
выдал: представление не найдено,
исправил так:
$saveOrderingUrl = 'index.php?option=com_teaching_staff&view=listitems&tmpl=component';
ошибка исчезла, что дальше делать - хз
выставил значения ordering в базе, один х не работает
« Последнее редактирование: 25.03.2015, 17:00:08 от AlekVolsk »
*

shurakana

  • Завсегдатай
  • 793
  • 43
Может в твоем компоненте отсутствует saveOrderAjax? т.к. по названию это вроде то что нужно..

А еще, скрипт js должен параметры сортировки принимать и передавать, если вообще сам писал компонент, то может id или class не те выставил или еще ченить в том же духе, она автоматом же должна работать, т.е. перетащил -> js скрипт собрал данные -> отправил в обработчик -> сохранилось в бд.
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

AlekVolsk

  • Профи
  • 6312
  • 336
saveOrderAjax описан в JControllerAdmin, там тоже вызывается $this->getModel()->saveorder($pks, $order); которая нигде не описана.
*

shurakana

  • Завсегдатай
  • 793
  • 43
Попробуй вот здесь создать компонент, и сравни в чем отчличия http://inet-reklama.com/sozdanie-komponenta
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

AlekVolsk

  • Профи
  • 6312
  • 336
Вышепреведенный код именно оттуда
*

b2z

  • Support Team
  • 7470
  • 743
  • Разраблю понемногу
UPD По какому то порядку они же выводятся в админке, может ошибка как раз в том, что по умолчанию там 0?
Может при добавлении записи сделать подсчет всех добавленных записей в этой таблице, затем делать к подсчету +1, и уже добавлять к только что созданной записи.
Именно. Например у меня в модели:

Код: php
/**
 * Prepare and sanitise the table prior to saving
 *
 * @param   object  $table  The table object
 *
 * @return  void
 *
 * @since  1.0
 */
protected function prepareTable($table)
{
$date = JFactory::getDate();

$table->generateAlias();

if (empty($table->id))
{
// Set the values
$table->created_time = $date->toSql();

// Set ordering to the last item if not set
if (empty($table->ordering))
{
$db = $this->getDbo();
$query = $db->getQuery(true)
->select('MAX(ordering)')
->from($db->quoteName('#__competition_competitions'));
$db->setQuery($query);
$max = $db->loadResult();

$table->ordering = $max + 1;
}
}
}

В контроллере ничего дополнительно делать не надо.

В макете:


Код: php
if ($saveOrder)
{
$saveOrderingUrl = 'index.php?option=com_competition&task=competitions.saveOrderAjax&tmpl=component';
JHtml::_('sortablelist.sortable', 'competitionsList', 'adminForm', strtolower($listDirn), $saveOrderingUrl);
}

Соответственно должна быть таблица с id=competitionsList

Код: html4strict
<table class="table table-striped" id="competitionsList">

У тебя это articleList. Поменяй в базе вручную ordering и должно заработать.
*

AlekVolsk

  • Профи
  • 6312
  • 336
Сейчас значения не нулевые, все равно не работает.
AJAX возвращает 404 Представление не найдено [name, type, prefix]: listitems.saveOrderAjax, HTML, teaching_staffView (с маленькой буквы - это нормально? где мог ошибиться?)
id в url соответствует id в table
saveOrderAjax из своего контроллера убрал
« Последнее редактирование: 25.03.2015, 18:41:28 от AlekVolsk »
*

AlekVolsk

  • Профи
  • 6312
  • 336
Все, работает.
Кляну в сотый раз свою невнимательность ))
Спасибо! *DRINK* :)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

com_ajax передача данных из формы POST

Автор ChervonStudio

Ответов: 32
Просмотров: 517
Последний ответ 28.08.2017, 10:58:20
от onelawyer
Создание модуля для своего компонента подгрузкой данных по AJAX

Автор john.deff

Ответов: 35
Просмотров: 755
Последний ответ 18.08.2017, 14:17:17
от Aleks.Denezh
Почему строки не удалились из базы данных?

Автор borro

Ответов: 6
Просмотров: 149
Последний ответ 28.06.2017, 10:26:48
от borro
[Решено] AJAX пагинация - подгрузка контента (в своём компоненте) Joomla 3.x

Автор ninth

Ответов: 15
Просмотров: 7022
Последний ответ 16.04.2017, 07:26:10
от ghostcom
[Решено] Получить в MODAL виде фильтры из вызывающего вида

Автор platonische

Ответов: 23
Просмотров: 335
Последний ответ 29.03.2017, 13:08:35
от platonische