Спрятать колонку

Drupal. Views vs Snippet

Есть в drupal такой модуль - Views
Модуль бесспорно хорош, но есть ли в нем такой уж большой смысл для людей, которые немного знают drupal api и sql. На примере я покажу, насколько просто и легко, в большинстве случаев, заменяется этот модуль обычным сниппетом. Зачем это стоит делать? Чем меньше модулей, тем быстрее работает сайт. Также вы можете написать любой запрос и не ограничивать себя возможностями, предоставляемыми конструктором, встроенным в модуль Views.

Рассмотрим самую простую задачку:
нам необходимо вывести ноды по заранее опреленному критерию, плюс мы должны сделать разбиение по страницам (с этим существует небольшой подводный камень). Предположим, что данным критерием является идентификатор пользователя.

Неужели для ее решения нам нужен громоздкий модуль? Нет, смотрите сами.

Для начала напишем запрос, который позволит вычитать нам эти данные из бд:

SELECT n.* FROM {node} n WHERE n.uid = 1

Важное замечание по данному примеру: нельзя писать ключевые слова SELECT и FROM в нижнем регистре (а вот WHERE можно писать), потому что pager при этом будет некорректно работать.

Теперь напишем сам сниппет:

<?php
  // инициализация данных
  $output = '';
  $postsPerPage = 20;
  $uid = 1;
  $sql = "SELECT n.nid, n.sticky, n.created FROM {node} n WHERE n.uid = $uid";
  $has_posts = false;
 
  // выполняется запрос и с разбиением по страницам, когда мы получаем информацию кусками и такими порциями выдает пользователю
  $result = pager_query(db_rewrite_sql($sql), $postsPerPage, 0, NULL);
 
  // чтение данных
  while ($node = db_fetch_object($result)) {
    $output .= node_view(node_load($node->nid), 1);
    $has_posts = true;
  }
 
  // добавляем pager
  if ($has_posts) {
    $output .= theme('pager', NULL, $postsPerPage);
  }
  return $output;
?>

Сниппет готов.

>> Читать далее

Drupal. Добавление мета тегов

есть модуль nodewords, но добавление лишнего модуля не есть хорошо и в таком случае гораздо лучше обойтись сниппетом или темизацией.

решение:
откроем файл node.tpl.php и добавим следующий код:

<?php if ($terms) and (!$is_front): ?>
         <?php 
                 $text = strip_tags($terms);
                 $text = check_plain($text);
                 $text = eregi_replace("\n",", ",$text);
                 $text = substr($text, 0, strlen($text) - 2);
 
                 drupal_set_html_head('<meta name="keywords" content="' . $text .'" />'); 
        ?>
<?php endif; ?>

как видно, сначала идет проверка существуют ли тэги для данного материала и не является ли эта страница главной (если не отсечь это условие, то на главную добавятся тэги для каждого из материалов). затем вытаскиваем из переменной $terms название тэгов и, используя функцию drupal_set_html_head, добавляем мета тэги.

что можно улучшить:
- парсить заголовок файла, доставая мета тэги и перезаписывая их;
- заменить использование регулярного выражения на что-нибудь другое (странно, но стандартную функию поиска я так и не заставил работать).

RSS-материал

Наверх