Skip to content

Как игнорировать всякую сортировку в Helpers\Table?

Здравствуйте.

 

Написал такое:

 

{{$ids = '654,765,234,9876'}}
{{$table = new \IPS\Helpers\Table\Content('IPS\cms\Records12', $record->url(), array(array(\IPS\Db::i()->findInSet('primary_id_field', $ids))));}}
{$table|raw}

Проблема в том, что к таблице применяется сортировка выбранная по умолчанию для базы данных. Смотрел описание функции Table\Content и не нашел как ее отключить сортировку, чтобы записи выводились именно в порядке 654,765,234,9876. Как задать новую сортировку знаю. Можете подкинуть идеи или файл с документацией, который надо прочесть?

Featured Replies

Как игнорировать всякую сортировку в Helpers\Table?
Что значит игнорировать сортировку? Все равно будет какая-то применяться https://stackoverflow.com/questions/8746519/sql-what-is-the-default-order-by-of-queries

 

Если говорить о чисто о ORDER BY, то https://stackoverflow.com/questions/14104055/ordering-by-specific-field-value-first

  • 2 weeks later...
  • Author

Нашел решение, делюсь со всеми. Чтобы самостоятельно задать сортировку записей в базе данных, нужно использовать функцию FIELD() для MySQL. Например, у меня был список из ID записей 654,765,234,9876, которые хранятся в массиве $only_ids, тогда решение будет таким:

 

// Создаем условие, по которому в таблицу попадут записи ID которых есть в моем списке
{{$where[] = array(\IPS\Db::i()->in('primary_id_field', array_filter($only_ids, 'is_numeric')));}}
// Конвертируем массив в строку, чтобы ID записей были через запятую
{{$ids_string = implode(",", $only_ids);}}
// Составляю строку-условие для сортировки в таблице
{{$sort = 'FIELD(primary_id_field,' . $ids_string . ')';}}

// Ну и в общем-то собираем всю таблицу (все строки нужны, если что-то удалить, то не работает)
{{$table = new \IPS\Helpers\Table\Content('IPS\cms\Records12', \IPS\Request::i()->url(), $where);}}
{{$table->sortBy = $sort;}}
{{$table->sortOptions = array( $sort );}}
{{$table->sortDirection = 'asc';}}
{$table|raw}

Ну да, нюбай так и указал выше по ссылке на field на стэковерфлоу.

  • 3 weeks later...
  • Author

Да я от туда и взял информацию, но захотел просто готовый кусок кода привести, чтобы кому-то сэкономить время.

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.