Блог пользователя - olk

Маленькие хитрости. Отладка кода.

13 апреля 2010 в 16:49

Для пишущей (и начинающей писать) братии под Друпал - расскажу о маленькой хитрости, которую я использую для отладки кода при написании модулей и функций темизации.
Вообще-то это известный «велосипед», но может кому нибудь из начинающих поможет.
Я не люблю использовать модуль devel из за его тяжести, поэтому использую
простенькую функцию помещенную мной в файл settings.php

Функция

/**
 * @param
 *      $msg - то что хотим показать, переменная , массив, объект
 *      $title - опционально, метка
 *      $pre   - обрамлять тэшгами <pre> - полезно для показа массивов и объектов
 *      $out   - если TRUE, выводить через drupal_set_message, иначе вернуть информацию
 */

function dbg($msg, $title = '', $pre = TRUE, $out = TRUE) {
global $user;
// выводим только для админа, в принципе можете изменить uid на другой,
// что бы выводилось под вашим экаунтом;
 if ($user->uid == 1) {
   if ($out) {
     $info = print_r($msg,1);
     if ($pre) {
       $info = '<pre>' . $info . '</pre>';
     }
     if (!empty($title)){
       $info = '<strong>' . $title . '</strong><br/>' . $info;
     }
   }
   if ($out) {
     drupal_set_message($info);  
   }
   else {
   return $info;
   }
  }
}

вот и все, теперь, чтобы посмотреть какую либо информацию, достаточно
в коде вставить нашу функцию

 dbg($value);

Оригинал заметки тут

Пишем модуль под Друпал

1 апреля 2010 в 17:32

Может кому будет интересно. Подшивка статей рассчитан на начинающих в программировании под Друпал, но достаточно продвинутых в PHP и SQL.

Начинаю цикл небольших статей, где на конкретном примере будет показано - как сделать свой модуль под Drupal.
Часто у новичков возникает мнение, что свой модуль - это нечто сверхсложное и не достижимое. Хочу развеять этот миф, конечно если вы владеете PHP и основами SQL.
Также желательно хоть немного ознакомится с Drupal API (но в принципе по мере создания модуля, мы «пройдемся» по основным возможностям Drupal api)
Построение модулей для разных целей, описано на официальном сайте, на странице «Module developer's guide», но для тех, у кого трудности с переводом или пониманием, я попробую шаг за шагом пройти с вами процесс построения модуля.
Сразу оговорюсь, мы будем рассматривать построение модуля под версию Друпала 6.x (как наиболее используемую на момент публикации статьи).

Возможно я не буду придерживаться «учебной» последовательности, где то вы не найдете объяснений - как я пришел к этому решению, вполне возможны ошибки и избыточность в коде.
Я не буду показывать создание модуля на выдуманных примерах, просто возьмем конкретную (и возможно полезную задачу) и попробуем ее решить при помощи своего модуля.

Продолжение здесь ...

Ну и цикл в процессе написания Smile так что комментарии, критика, поправки приветствуются ...

Еще одно обновление модуля ccfilter

18 февраля 2010 в 11:44

ccfilter logo
Еще одно обновление модуля ccfilter.
Подправлены небольшие ошибки в коде, добавлен новый фильтр «Авто тэг»
Правда это уже не совсем фильтр, так как пришлось задействовать хук hook_nodeapi.
Как он работает:
1. В настройках ccfilter выбираем словарь в который будут добавляться тэги.
2. Прописываем «ограничители» для автотэгов (по умолчанию я выбрал довольно редко используемую с одной стороны, и не сложную для ввода комбинацию из двойных фигурных скобок)
3. Если хотим, что бы «Авто тэг» работал и в заголовке ноды, ставим соответствующий флажок.
4. Не забываем добавить фильтр в используемый формат ввода.

При создании/редактировании материала просто отмечаем нужные слова «ограничителями» для «автотэгов», и при сохранении материала, автоматически к данному материалу будут добавлены тэги.

Небольшая особенность, при создании тэгов из заголовка:
Если в «теле» ноды, «ограничители» для автотэгов сохраняются (и фильтруются ccfilter-ом), то из заголовка они удаляются (это сделано из-за того, что заголовок не проходит фильтрации)

Кстати при отработке фильтра «отмеченные» слова «обрамляются» тэгами ... , что в принципе позволяет их как-то выделить через CSS.

PS. Есть небольшие огрехи и грамматические ошибки в файле переводов Smile , в дальнейшем подправлю.

страница проекта
http://drupal.org/project/ccfilter

Бетта тестирование модуля cctags (альтернатива модуля tagadelic)

21 января 2010 в 16:45

Cctags logo
Бетта тестирование
модуль cctags - как альтернатива модулю tagadelic.

гибкие настройки и расширенные возможности по темизации вывода облака.
(отдельные файлы шаблонов для тэгов,названия словаря,страницы облака)

Возможность (через настройки включать несколько словарей (а для словарей с древовидной структурой - кроме того включать/выключать нужный уровень)) вывода тэгов.
Автоматическая генерация нужного количества блоков и/или страниц.
Генерация блока из Тэгов прикрепленных к ноде.
Генерация блока связанных материалов для ноды (через теги)

Облако юзеров (блок) (с весом пропорциональным количеству опубликованных материалов (критерий «веса»
$user->weight = node_count * 3 + comments_count))

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

Определено некоторое апи (хуки), при помощи которого можно пререопределить «вес» термина и/или юзера

<?php/**
 * Invoke a hook_term_count() operation in all modules.
 *
 * @param &$term
 *   A tags object.
 * @return
 *   none.
 * example hook_term_count:
 * function mymodyle_term_count(&$term){
 *   if($term->tid == 356) {
 *   $term->count = 10;
 *   return TRUE;
 *   }
 *   else {
 *   return FALSE;
 *   }
 *  }
 */

/**
 * Invoke a hook_user_weight() operation in all modules.
 * or if defined function get_user_weight(&$user)?>

jQuery 1.3.1 Released

7 февраля 2009 в 13:16


Зарелизили ,http://blog.jquery.com/2009/01/21/jquery-131-released/,
теперь ждемс когда в Drupal включат ,
Заметил маленький нюанс - модуль Jquery upadate перестал видеть версию jquery
(так как в jQuery.js изменили заголовок, теперь вместо /* jQuery 1.2.6 - New Wave Javascript
там пишут /* jQuery JavaScript Library v1.3.1 )
соответственно правится изменением патерна поиска версии в модуле jquery_update.module

--$pattern = '# * jQuery ([0-9\.a-z]+) - New Wave Javascript#';
++$pattern = '# * jQuery JavaScript Library ([0-9\.a-z]+)#';

Ну и зачем это надо (я имею ввиду ветку 1.3.*) Smile
Пишут что значительно увеличено быстродействие,
плюс несколько приятных фич:
jQuery теперь поддерживает события, которые могут быть связаны со всеми элементами,
как существующими в DOM, так и с теми, которые будут добавлены в будущем.
(см. live() и die())

Ошибочка в D6

20 января 2009 в 13:59

Случайно никто не сталкивался с такой ошибкой в Друпал 6(или это только у меня?)
Ситуация:
Если в ноде есть вывод таблицы со включенным sticky headers (например список приатаченных файлов), то остальные java script-ы перестают отрабатывать на этой странице.
Пока я решаю это тупо отключив в теме sticky headers (путем переписывания в свой теме функции theme_table), но может есть другие решения ?

Новый модуль WrapperBlocks

15 января 2009 в 13:21


Обновление:
Версия обновлена!
Теперь одним Врап-блоком можно определить несколько блоков,
для этого необходимо определить переменные $info,$cache и $title как массивы,
и обработку блоков определять в зависимости от параметра $delta.
$delta - это внутренняя дельта врап-блока равная индексу в элементе массива $info;
т.е. 0 , 1 ...
Более подробную информацию можно получить на сайте http://www.hotel-prog.ru/wrap-blocks

Обновление:
Версия обновлена, в шаблон описания блока добавлена
Необязательная функция init.
Вызывется из block_wrapper при инициализации модуля - hook_init()
Вызов данной функции произойдет если данный блок виден на данной странице.
Это может быть полезным например для вызова drupal_add_js или других действиях
для инициализации блока.

WrapperBlocks - модуль формирования блоков

ОПИСАНИЕ
Давно озадачился мыслью, как хранить и управлять своими PHP-сниппетами. Хранить их в
базе не совсем кошерно, можно хранить в файлах и вызывать через Include, то же есть
определенные недостатки, поэтому собрался и написал не большой модуль WrapperBlocks.
Суть модуля в том, что он предоставляет Друпалу стандартные блоки, содержимое которых,
формируется PHP-сниппетом оформленным определенным образом.
Т.е. вы оформляете сниппет по определенному шаблону, сохраняете шаблон в файле с
определенным именем, бросаете этот файл в поддиректорию block-extra в директории модуля
и далее стандартными методами друпала размещаете этот блок в нужном регионе.

Анонс модуля ccfilter

27 декабря 2008 в 18:02

Ccfilter module
Обновление:
В связи с тем, что мне ни как не удается зарегистрировать экаунт на CVS drupal.org
(последний ответ был такой:
Message from the CVS maintainer:
The license contained in the README file doesn't appear to be compatible with the GPL that Drupal uses. If you want to use Drupal CVS and distribution services you have to use the GPL license as used by Drupal.
)

Преданонс модуля ccfilter и нужна помощь в английском

19 декабря 2008 в 15:23

Вообщем потихоньку дописываю модуль фильтров, но перед тем как выложить его на drupal.org, хотелось бы, что бы люди знающие, поправили мой «чудовищный» английский :).
поэтому выкладываю readme.txt с просьбой поправить уж совсем не правильные выражения (а то засмеют на d.o).

$Id;

The ccfilter module - popular collections filters.

Ccfilter: PHP inline code.
The filter type php inline code - allows you to embed in the content of material code on php,
code must be entered into between the tags [phpcode] and [/phpcode], program code concluded
between the tags must be from a valid PHP-code. This can be useful when you need one material
at the same time show and the source code of such programs and this code.
The result of the implementation of the code will be placed in a unit <div class="ccfilter phpcode"> ... </div>.
You can also broaden the definition of the class through an indication of your class = class, for example,
when entering [phpcode class = myclass] ... [/phpcode], the result of the code will be placed
in a unit <div class="ccfilter phpcode myclass"> ... </div>.

Ccfilter: Collapse text.
The filter type collapse - the text concluded between the tags [collapse] and [/collapse], you can minimize / deployed to watch.
If the opening tag would be clarification collapsed, the original state of the text will be minimized.
Tag can be set in the opening tag after the = (eg [collapse collapsed = Click here to see the text].
If you do not specify a label, it will use the pre-header.

Какой тут модуль "закладок" стоит ?

3 октября 2008 в 17:31

Собственно сабж, посмотрел Favorite Nodes , что то не очень , click2bookmark - под шестерку пока нет,
Может кто, какие другие посоветует ?
Интересует иммено под д6, и желательно бы с Ajax- добавлением/удалением ноды в закладки ...

Небольшой сниппет вместо модуля tagadelic (Облако тэгов)

30 сентября 2008 в 17:59

Небольшой сниппет, показывающее облако тэгов по заданному (через код vid) словарю ...
Конечно он не покрывает все возможности и настройки модуля tagadelic, но в некоторых случаях может оказаться полезным
Для темизации всего блока можно использовать стилизацию tags.voc-номер-словоря,
для темизации терминов a.tags-voc-номер-словоря ...
PS.Данный код выводит только «реальные» термины словоря, т.е. термины которые «привязаны» к нодам (просто мне показалось не логичным выводить «пустые» тэги, не связанные с материалом)
Обновление:

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

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>';?>

Drupal + Apache + nginx , маленькая проблемка

17 сентября 2008 в 17:14

Вот решил себе чуть чуть пооптимизировать нагрузку на сервере, поставил (в качестве прокси) nginx, но маленькая ложечка дегтя все же нашлась Smile в Друпаловском журнале доступа (accesslog), теперь вместо реальныйх адресов попадают 127.0.0.1, что вполне естественно, но может есть какая хитрая опция у nginx, что бы отдавал реальные адреса ? или "забить" ?

Друпал для "Чайников"

2 сентября 2008 в 17:13

[float=right][/float]
Хочу поделиться некоторыми мыслями по поводу построения сайтов на основе CMS Drupal.
Не вдаваясь в подробности построения архитектуры системы и наполнения ресурса, просто несколько правил и пояснений к ним.
Во первых надо четко понимать, то что мы можем получить, используя Друпал, делиться на две части:
1. Что выводить (какая информация попадает в контент сайта)

Аплоад коммент (comment_upload) модуль для Drupal 6.*

16 июля 2008 в 23:37

Ждал когда же, кто надумает конвертнуть достаточно полезный модуль comment_upload для Drupal 6.*. Не дождался Smile .
Решил занятся сам. В результате получилось то, что получилось.
Предлагаю оттестить, и довести до ума (путем обсуждения, и совместной доработкой).
Данный модуль это некая декомпозиция с последующей компиляцией одноименного модуля от версии 5.*,
модуля upload от Drupal 6.*, и найденного в интернете патча.

Отличия от версии для Drupal 5.*. и особенности ...

  • Убрал (по моему бесполезную) опцию прикреплять не более одного файла.
  • Лимиты на размер и объем файла берутся из настроек модуля upload (ну в принципе и раньше так было)

Продожение "Три в одном", теперь это Четыре в одном :)

11 июля 2008 в 18:04

Оригинал статьи и сам архив пакета здесь
не стал выкладывать ахив, что бы не перегружать Drupal.ru- он и так еле, еле дышит Smile

Немного доработал фильтр, который описывался в статье Маленькое отступление.
Внимание: Проверено только для Drupal 6.*
Что сделано:
Теперь это четыре в одном.

  • Добавлена обегченная версия модуля smileys (Смайлики).
  • Сделаны настройки фильтра, теперь можно включить или отключить обработку входящих в фильтр элементов.

Три в одном, несколько фильтров для D6

25 июня 2008 в 15:52

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