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

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Самописный компонент. В таблице в базе имеется поле `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

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

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

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

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

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
В консоли руганутся на это:
$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

  • Давно я тут
  • 792
  • 50 / 6
Может в твоем компоненте отсутствует saveOrderAjax? т.к. по названию это вроде то что нужно..

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

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
saveOrderAjax описан в JControllerAdmin, там тоже вызывается $this->getModel()->saveorder($pks, $order); которая нигде не описана.
*

shurakana

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

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Вышепреведенный код именно оттуда
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
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

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

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
*

AlekVolsk

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

Прописать условие для сохранения данных в БД

Автор semen1707

Ответов: 0
Просмотров: 313
Последний ответ 14.04.2021, 00:59:44
от semen1707
[РЕШЕНО] Дублирование при создании

Автор platonische

Ответов: 7
Просмотров: 921
Последний ответ 12.02.2021, 11:24:26
от platonische
[РЕШЕНО] onChange в админке на field modal

Автор platonische

Ответов: 1
Просмотров: 377
Последний ответ 30.01.2021, 16:40:45
от platonische
MySQL Что быстрее выбор столбца в таблице с кучей столбцов или с 1?

Автор platonische

Ответов: 2
Просмотров: 355
Последний ответ 22.10.2020, 15:28:19
от platonische
Пример представления компонента с выводом списка с фильтром по связанной таблице

Автор borro

Ответов: 36
Просмотров: 1567
Последний ответ 14.10.2020, 11:59:15
от b2z