Друпализмы. Выводим ссылки-превьюшки на последние материалы
21.03.06Наша студия сделала не один сайт на базе CMS Drupal (или Друпал, как я буду дальше называть этот движок, ибо лень все время переключать раскладку). И недавно у меня родилась идея делиться со всеми интересующимися, какими-то маленькими секретами и приемами, которые были познаны во время работы над проектами. Подаваться информация будет из расчета, что читатель уже знаком с идеологией Друпала, и нужды разжевывать каждую строчку кода — нет. Длинных вводных о том, какой это замечательный движок и как сделать в нем меню также не будет.
А начнем, пожалуй, с такой задачи: организовать вывод графических ссылок на последние работы в «Портфолио». Чтобы лучше понять в каком виде все это будет представлено, загляните к нам в «Дневник» и опустите свой взгляд на восемь картинок внизу. Вот это мы и будем делать.
Первое, что нужно сделать — это договорится, что файлы с превьюшками должны прикрепляться к соответствующей ноде. Например у нас к каждой ноде из «Портфолио» помимо всего прочего прикреплены по две превьюшки: большая — 83 на 62 точки, и маленькая — 40 на 30 точек. Чтобы отличать превьюшки от других прикрепленных файлов, мы договорились, что название большой картинки будет заканчиваться на «_bigthumb», а маленькой — на «_smallthumb».
Теперь, непосредственно сам код. Как можно догадаться, для решения задачи необходимо сделать php-вставку в один из файлов темы. У нас, например, файл который рисует разделы «Дневника» называется diary.tpl.php. В нужном месте я добавил вот такие строчки:
FROM {node} n
INNER JOIN {term_node} t ON n.nid = t.nid
WHERE n.type = 'story' AND t.tid = '3'
ORDER BY n.created
DESC LIMIT 8");
$out="";
while ($nd = db_fetch_object($res)) {
$fl = db_query("SELECT f.filename, f.filepath FROM {files} f WHERE f.nid = ".$nd->nid);
while ($f = db_fetch_object($fl)) {
if (strstr($f->filepath, "_smallthumb")) {
$out = $out.'<a href="'.drupal_get_path_alias("node/".$nd->nid);
$out = $out.'"><img src="'.$f->filepath.'" width="40" height="30" class="picsmall"></a>';
}
}
}
print $out;
Тут следует сделать несколько пояснений. В первом sql-запросе запрашивается список из 8 нод, которые имеют тип «story», а также принадлежат к определенному терму таксономии (t.tid = '3' — это терм под номером 3 в котором хранятся все ноды нашего портфолио). Далее, для каждой ноды из таблицы files достается список всех прикрепленных файлов и при помощи условия отбирается ссылка на файл, в имени которого есть строка «_smallthumb». Остается скомпоновать вывод в строку $out и не забыть пропустить друпаловский путь к ноде через функцию drupal_get_path_alias(), которая смотрит, нет ли для этого пути соответствующей короткой ссылки (алиаса).
Предлагаемое решение является «одним из». Для нас оно работает отлично.
Евгений Тимашев