Пример вывода списка нод по 10 штук на страницу, с возможностью сортировки по заголовку, дате и типу ноды:
$header = array(
array('data' => 'Заголовок', 'field' => 'title'),
array('data' => 'Дата создания', 'field' => 'created'),
array('data' => 'Тип', 'field' => 'type'),
);
$nodes = db_select('node', 'n')
->fields('n', array('title', 'created', 'type'))
->extend('PagerDefault')
->limit(10)
->extend('TableSort')
->orderByHeader($header)
->execute();
$rows = array();
foreach ($nodes as $node) {
$rows[] = array(
check_plain($node->title),
format_date($node->created),
$node->type
);
}
$output = theme('table', array('header' => $header, 'rows' => $rows));
$output .= theme('pager');
Подробнее про "Extenders".
Создание html таблицы с сортировкой и пагинацией в Drupal 6.
Написанное актуально для
Drupal 7
Похожие записи
- Как работает опция "Aggregation type" в настройках полей Views при включённой агрегации
- Views сортировка по выражению/условию/формуле
- Views фильтр "товар имеет опубликованную вариацию"
- Модуль EAV Field — хранение большого числа характеристик сущности в одном поле
- Добавить сторонней контент сущности своё базовое поле (base field)
Комментарии
интересен $output
а не проще ли через views такое делать?
не проще
$node->title через check_plain пропустить нужно, это ведь raw-output, мало что там может пользователь ввести, а браузер все скушает.
Вот например как с помощью вьюшки это выводится
http://my.jetscreenshot.com/5611/20110913-so4a-42kb
Хотелось бы услышать в чем по Вашему мнению сложность. Сделала за 2 минуты. $node->title преобразовывается в plain-text
А вот что выводит Ваш код - http://my.jetscreenshot.com/5611/20110913-3ji7-43kb
Html, javascrip-код не преобразовывается, что несет потенциальную уязвимость.
добавил check_plain
Если бы добавили сравнение со способом через Views, было бы более полное рассмотрение вопроса :)
пост о том, как пользоваться сортировкой и пагинацией в DBTNG, а не о способах вывода табличной информации. любители Views могут попробовать вывести в таком виде ну например логи из watchdog :)
Drupal "умеет" сортировать таблицу по столбцам - отлично, а виджет с фильтром по тексту таблицы интегрированный у него есть (т.е. готовое поле ввода для отфильтровки по содержимому конкретного поля/полей таблицы, логика работы которого генерится автоматом как в случае с сортировкой и постраничностью)?
нет
Очень жаль. А нету примерчика как фильтр к таблице можно реализовать?
для Drupal 7
http://xandeadx.ru/blog/drupal/138
Отличная заметка!
Кстати, если из кода убрать эти две строки:
то сортировка никуда не денется, т.к. она задается в header, так если у поля есть параметр field, то оно будет сортируемым, если нет, то нет.
И еще, думаю может кому-нибудь пригодится, если надо объединить несколько колонок в теле таблицы под одной в хедере, то колонка должна выглядеть так:
colspan - количество колонок.
она работать не будет
Ваша правда. Сортировка как бы есть, но ее как бы нет.
Хреново, что в семёрке сортировка возможна только с db_select(), а не с db_query() как было в шохе
Извиняюсь за глупый вопрос - только начал пытаться понять drupal. А куда этот код вставлять? Я попробовал в файлик шаблона (предварительно сделал node--название типа ноды.tpl.php) но ничего не произошло!
http://ru2.php.net/manual/en/function.echo.php
Доброго времени суток!
Разбираюсь с описанным выше способом вывода данных, только не ноды, а собственноручно созданной сущности.
Да, впрочем, вопрос актуален и для ноды, для любой сущности в общем-то. Вопрос в следующем - поля сущности описываются в собственной таблице БД ('node' в данном примере) и при построении строки нашей html-таблицы берутся оттуда. А что делать, если я присоединил к сущности дополнительное поле, при помощи интерфейса fields, и хочу вывести это поле вместе с остальными в той же таблице? Для него ведь создаются отдельные таблички в БД вида 'field_data_field_myfield' и тд.
Я конечно могу по аналогии задать при описании хедера
но потом идёт выборка из 'node'
т.е. значение поля field_myfield таким образом не достать, т.к. оно лежит в другой таблице. Я могу реализовать способ прямого доступа к значению этого поля для текущего экземпляра сущности и вписать его в массив rows[]. И оно даже нормально будет выводиться. Но при этом сортировка по этому полю работать не будет, естественно, т.к. она производится тоже через db_select таблицы с полями сущности ('nodes') и условие ORDER BY.
Можно ли как-то реализовать сортировку такой таблицы по полю, добавленному к сущности через fields api?
http://xandeadx.ru/blog/drupal/88#section-join
Спасибо, то что нужно
такая проблемка запрос не возвращает массив данных, только если использовать метод fetchAll() и ему подобные но ведь тогда не будет работать пейджер. количевство вроде правильно записей выводин но значений нет. вот код:
ошибка следу.щего вида:
Notice: Trying to get property of non-object в функции simpleads_settings_owner() (строка 227 в файле D:\xampp\htdocs\votkinsk.dev\sites\all\modules\simpleads\simpleads.module).
что в строке 227?
ошибки на любое обращение/вывод к объекту
$node_a
так же ошибкт подобного радо в 230 строке
5 штук на каждое обращение к $node_a
в foreach надо передавать результат execute() а не объект SelectQuery
ну так у меня стоит execute() в конце объекта. или надо чтото еще?
пробывал по другомо execute() из selectquery убрал и сделал так:
$node_ads = $node_query->execute();
и передал в foreach $node_ads результат выводиться а пейджер нет.
в первом случае наоборот тамблица есть пейджер есть результата нет.
в чем проблема? не могу понять
Приветствую,
а как заставить это дело (pager) корректно отображаться в блоке на одиночной странице для авторизованных пользователей? Для анонимов все OK.
точно так же
Здравствуйте,
а как pager-у задать вывод вида 1 из N со ссылками назад-вперед, как у Views.
переопределите theme_pager
Спасибо!
В моем случае проблема решилась простой передачей параметров
А как добавить ajax к pager?
Как на одной странице разместить две такие таблицы и чтобы работало.
А как узнать всего кол-во записей? Отдельном запросом или как нибудь можно взять из extend('PagerDefault') ?
Очень нужен совет. Как в таблице один из столбцов сортировать не по полю из таблицы MySQL, а по своим параметрам?
что за параметры?
Сумма нескольких полей из двух прикрепляемых таблиц (комментарии и материалы пользователя).
Скажите, а как перевести кнопки "next" и "last"&
admin/config/regional/translate/translate
Можно ли сделать чтобы сортировка работала для всех колонок, а не только для первой?
Да, укажите 'field' => 'имя_поля_в_бд' как у первой колонки.
А не пробовали прикрутить ajax-пагинатор?
А теперь главный вопрос, можно ли автоматически создавать таблицу данной функцией, но не из БД а скажем из данных парсинга xml файла? Если да, то как?
http://xandeadx.ru/blog/drupal/271
Круто! Благодарю) Сперва хотел для этих целей плагин под вьюс сделать, но лучше - проще сделать.
Добавить комментарий