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

чт, 18.09.2008 13:06 :: olk

Тут поэкспериментировал, и нашел интересный способ вставки 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(0, 0, 0, date("m"), date("d")-$days,   date("Y"));
$end_stamp = mktime(23, 59, 59, date("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
а в самом сниппете использовать их значения, тогда один и тот же файл сниппета можно использовать в разных блоках изменяя
значения этих переменных.

Добавить комментарий
« Добавить комментарий
» Добавить комментарий