Много говорят о том, что вьюс тяжелый модуль и лучше делать собственные "прямые" запросы к базе
Так как у меня вьюсами построена большая часть сайта, хочу уточнить, как повторить снипетом и будет ли это менее ресурсноемким.
Что имется
Вывод анонсов (стандартных тизеров) нод со следующими фильтрами
1. Опубликовано
2. Вид ноды (page или story например)
3. У ноды есть определенный термин таксономии
Сортировка стандартная, по дате публикации
вывод по 10 штук
Все это добро поместить по определенной ссылке (то есть вывод страничный)
и второй вид
Вывод заголовком, в таблице (со стилем "таблица") заголовки, отсортированные по заголовку ноды, фильтры те же
1. Опубликовано
2. Вид ноды (page или story например)
3. У ноды есть определенный термин таксономии
также, это добро доступно по определенный ссылке
Подскажите, можно ли и нужно ли это лучше делать сниппетом, или нет, не тот случай?
Комментарии
тема интересная, какая посещаемость предполагается - анонимы/авторизованные?
Насчет производительности точно не скажу. Отвечу что знаю и как думаю.
Вьюсы работают через модуль. Если не изменяет память то то что наяваяли во вьюсе (запрос) храниться в базе. Вывод Дергаем базу 1 раз на извлечение запроса, 2 раз выполняем сам запрос.
Снипет - дергаем только сам запрос, так как обращаемся к самой базе на прямую.
Но при работе со снипетами есть один сколькзий момент. Безопасность. Если вьюсы еще более менее фильтруют вход в базу, то снипет это код программиста и ответственность за передачу параметров полностью на разработчике кода. Тоесть снипет больше уязвим в плане XSS
Я на своем сайте использую и то и то.
Вьюс просто хорош тем что визуально можно сконструировать запрос. Хотя в некоторых местах он не совсем верно использует синтаксис SQL
Views, помимо всего прочего, предлагают тонну хуков, генерируют кучу лишних данных в объекте, которые вы может и не будете использовать, и вообще весьма активно используют как процессор, так и память. В своём коде будет в разы меньше данных гоняться. В связи с этим мне просто непонятно, зачем некоторые модули требуют Views для работы, хотя он им в принципе по факту не нужен... например OG User Roles...
Вьюс показывает запрос, которым он черпает данные.
Вы его контрол-Ц контрол-В, поправьте, если нужно, и пишите модуль или сниппет.
Если запрос тяжелый, то закешируйте, можно и мемкеш, можно и самому на файлах.
Спасибо за комментарии
Ни у кого нет примера снипета для первого варианта
sql + php [+ drupal API]
вот небольшой пример без hook_menu
$type = 'story';
$status = 1;
$sql = "SELECT * FROM {node} n WHERE type = '%s' AND status = %d ORDER BY n.created DESC";
$pager_num = 0; // This is the first pager on this page. We number it 0.
$result = pager_query(db_rewrite_sql($sql), 10, $pager_num, NULL, $type, $status);
while ($data = db_fetch_object($result)) {
$node = node_load($data->nid);
$output .= node_view($node, TRUE);
}
$output .= theme('pager', NULL, 10, $pager_num);
return $output;
}
Только это не снипет, это кусок модуля.
можно обойтись без node_load и node_view, но кода тогда будет гораздо больше.
спасибо, примерно понятно