Еще один интересный и безопасный способ вставки сниппетов

Главные вкладки

Аватар пользователя olk olk 18 сентября 2008 в 13:06

Тут поэкспериментировал, и нашел интересный способ вставки PHP сниппетов (может правда изобрел велосипед :).
Суть в том, что бы сниппет хранить не в контенте сайта (блоках, страницах и т.д), а во внешних файлах и вставлять в контент
посредством php конструкции include.

Преимущества:
1. Код сниппета можно менять и отлаживать не изменяя контента.
2. При некорректном (ошибочном) коде, не надо заморачиваться с отключением блока.
3. Все сниппеты можно держать в одном месте.

Недостатки:
Нужен доступ к файловой системе сайта на создание и изменение фалов.
Желательно также иметь доступ или к конфигу апача или (если это хостер) к управлению доступом к дирректориям.

Реализация:

создаем дирректорию: например sites/all/snippets
закрываем к ней доступ для сторонних хостов

для апача в httpd.conf прописываем (подставляем естественно свой путь до директории)

  <Directory "/var/www/sites/all/snippets">
   Order Allow,Deny
   Allow from localhost
  </Directory>
   

Создаем файл(ы) со сниппетом в нашей созданной дирректории
например:


<?php 
// Сниппет показывающий количество созданных материалов определенного типа, за определенный день
$t='blog';  //тип материала
$days=0;    // за котороый день назад  0 -за сегодня,1 - за вчера и т.д.
$start_stamp mktime(000date("m"), date("d")-$days,   date("Y"));
$end_stamp mktime(235959date("m"), date("d")-$days,   date("Y"));
//print 'start_date='.date("d-M-Y H:s",$start_stamp).'<br>';
//print 'end_date='.date("d-M-Y H:s",$end_stamp).'<br>';
$r=db_query("SELECT DISTINCT COUNT(nid) as cnt 
FROM {node} WHERE type='%s' AND created BETWEEN %d and %d"
,$t,$start_stamp,$end_stamp);
$r=db_rewrite_sql($r);
$count=db_result($r);
print 
t("new $t's ").$count;
?>

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

В нужный нам участок контента (блок, страница ... ) вставляем код


  <?php 
   
include 'sites/all/snippets/new_blogs.php';
   
?> 
  

Можно попробовать сниппеты с псевдопараметрами
т.е. например определить ряд переменных перед include
а в самом сниппете использовать их значения, тогда один и тот же файл сниппета можно использовать в разных блоках изменяя
значения этих переменных.

Материал с сайта www.hotel-prog.ru

Комментарии

Аватар пользователя J. Bravo J. Bravo 18 сентября 2008 в 13:48

Я так у себя организовал работу с сообщениями для пользователя - нужно было на нескольких страницах выводить одно и то же сообщение при отсутствии записей во view. Сообщение по ходу разработки сайта пару раз менялось и, скорее всего, еще не раз изменится (описание того, у каких именно пользователей нет доступа к этим материалам и что нужно сделать, чтобы его получить). Каждый раз менять сообщение во всех вьюхах - не по джидайски. Сделал вывод сообщения при помощи функции, ее реализовал в отдельном файле, который и подключил везде при помощи include.