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

чт, 18.09.2008 13:06 :: olk

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

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

Реализация: создаем дирректорию: например sites/all/snippets закрываем к ней доступ для сторонних хостов для апача в httpd.conf прописываем (подставляем естественно свой путь до директории)

  1.   <Directory "/var/www/sites/all/snippets">
  2.    Order Allow,Deny
  3.    Allow from localhost
  4.   </Directory>
  5.    

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

  1. <?php
  2. // Сниппет показывающий количество созданных материалов определенного типа, за определенный день
  3. $t='blog';  //тип материала
  4. $days=0;    // за котороый день назад  0 -за сегодня,1 - за вчера и т.д.
  5. $start_stamp = mktime(0, 0, 0, date("m"), date("d")-$days,   date("Y"));
  6. $end_stamp = mktime(23, 59, 59, date("m"), date("d")-$days,   date("Y"));
  7. //print 'start_date='.date("d-M-Y H:s",$start_stamp).'<br>';
  8. //print 'end_date='.date("d-M-Y H:s",$end_stamp).'<br>';
  9. $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);
  10. $r=db_rewrite_sql($r);
  11. $count=db_result($r);
  12. print t("new $t's ".$count);
  13. ?>
и сохраняем его под любым понравившимся именем (наверное желательно что бы имя файла несло какую либо смыcловую нагрузку)

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

  1.   <?php
  2.    include 'sites/all/snippets/new_blogs.php'
  3.    ?>
  4.  

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

Комментарии

А что вставить тупо в файл шаблона нельзя? или в template.php

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