20 API за 20 дней

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

Аватар пользователя graker graker 9 апреля 2010 в 21:42

Компания Trellon недавно запустила цикл ознакомительных статей о том как пользоваться API популярных модулей Друпала (Views, CCK и так далее). Цикл называется "20 API за 20 дней", сейчас в нем пока статьи про 4 API, но скоро, видимо, будет 20.

Статьи показались мне неплохими, так что я их решил переводить. Переводы публикую у себя в блоге под тегом "20 API за 20 дней". Пока перевел вступление со списком запланированных API и первую статью (про CCK). Дальше будет больше, если интересно - заходите.

Комментарии

Аватар пользователя graker graker 9 апреля 2010 в 21:56

2 adubovskoy: не, про селект боксы нигде не публиковал, мне оно не показалось значительным.

2 Ламер: ну да, пехепе надо изучать.

Аватар пользователя Dan Dan 11 апреля 2010 в 12:09

Очень хорошее дело ты задумал! Спасибо.
После перевода надо будет занести статьи в подшивку документации в обязательном порядке.

Аватар пользователя graker graker 11 апреля 2010 в 13:23

Dan wrote:
После перевода надо будет занести статьи в подшивку документации в обязательном порядке.

Ага, только надо со ссылками на оригиналы треллонавтовских статей Smile

Аватар пользователя Dan Dan 11 апреля 2010 в 17:55

"graker" wrote:
Ага, только надо со ссылками на оригиналы треллонавтовских статей :)

И на твой блог тоже Smile
На английском худо-бедно найти информацию можно, но на русском мало. Тем более в одном месте.

Аватар пользователя graker graker 11 апреля 2010 в 18:41

Dan wrote:
На английском худо-бедно найти информацию можно, но на русском мало. Тем более в одном месте.

А ведь коммьюнити для этого и существуют! Smile

Аватар пользователя Dеmimurych Dеmimurych 13 апреля 2010 в 23:33

Сначала меня насторожила статья про CCK, которая закончилась словами

Quote:

Несмотря на длину заметки, мы рассмотрели процесс только поверхностно. Более детальную информацию об использованных здесь функциях, ищите в модулях, включенных в состав CCK, таких как 'text' и 'nodereference', ...

я подумал,
ладно, веротяно кому то лень просто прочесть апи на api.drupal.org и ему проще увидеть это в такой вот неформальной форме пересказа...

но когда я прочитал статью о хуках

которая содержит ряд КОНЦЕПТУАЛЬНЫХ ошибок в описаниях хуков DRUPAL
я понял:

это переводить не только не нужно,а еще и вредно.

как пример - хуки друпала не привязаны к имени модуля. Да, такая привязка в некоторых "высокоуровневых" функциях друпала есть. Но это не правило.

За информацией к размышлению -> описание хуков работы с программно организованными типами материалов. Которые О УЖАС не привязаны к названию модуля, но тем не менее называются хуками etc...

жду фееричного продолжения

Аватар пользователя graker graker 13 апреля 2010 в 23:41

Dеmimurych wrote:
которая содержит ряд КОНЦЕПТУАЛЬНЫХ ошибок в описаниях хуков DRUPAL

Я правильно понял, ряд состоит из одного пункта?

Quote:
как пример - хуки друпала не привязаны к имени модуля. Да, такая привязка в некоторых "высокоуровневых" функциях друпала есть. Но это не правило.

Базару нет. Нельзя ли фееричную цитату, где написано, что это правило?

Аватар пользователя Dеmimurych Dеmimurych 21 апреля 2010 в 22:46

"graker" wrote:
Нельзя ли фееричную цитату, где написано, что это правило?

в любом месте описывающим хуки, написано - имя модуля.
а это не так. к имени модуля - это имеет отношение точно так же как ромб к паралелограмму.
первый является частным случаем последнего.

пример

Quote:

Например, если у кого-нибудь есть модуль foo и нужно реализовать hook_bar, нужно поместить в модуль foo функцию под названием foo_bar. Так что реализовать хук не очень-то и сложно

и так далее.

весь материал написан таким образом что создает ложное впечатлние будто бы хуки привязаны к имени модуля.

Аватар пользователя graker graker 22 апреля 2010 в 0:26

Dеmimurych wrote:
а это не так. к имени модуля - это имеет отношение точно так же как ромб к паралелограмму.
первый является частным случаем последнего.

Во-первых: в данном случае скорее наоборот - реализация хуков _insert, _update, _delete и еще нескольких в модуле node является исключением из правила, если уж вам угодно называть это правилом. Если же есть некое более общее правило, может быть, уже пора его привести вместе со ссылкой на документацию, где это правило указано?

Во-вторых: node_invoke - это workaround, созданный для того, чтобы разработчик не втыкал условные операторы в хуки, если у него создается несколько типов нод в одном модуле. О том, что это workaround говорит вся реализация, начиная с того, что в комментариях к hook_node_info() говорится "обычно сюда вставляют имя модуля" и заканчивая тем, что столбец в БД, в котором хранится префикс названия функции реализации хука прямо так и называется - имя модуля ('module'). Сделано это, я полагаю, специально, чтобы у пользователя не создалось впечатление о существовании неких более общих правил, нежели имямодуля_имяхука.

В третьих, не стоит забывать, что это обучающая статья, в которой необходимо дать читателю представление о хуках и том, как они обычно именуются, а не перечислять частные случаи, с которыми многие могут вообще не столкнуться. Кстати, в цикле была запланирована статья и про Node API, так что рассказать об обсуждаемой проблеме они могут и потом.

В четвертых, реализацию произвольного хука, вызываемого через module_invoke() или module_invoke_all(), иначе как с имени модуля у вас начать не получится, и это действительно правило.

Наконец, в пятых, если эта ошибка так фундаментальна, предлагаю начать ее исправление прямо со страницы API Hooks, потому что ее авторы явно с вами насчет правил не согласны. Цитата:

Quote:
Drupal's module system is based on the concept of "hooks". A hook is a PHP function that is named foo_bar(), where "foo" is the name of the module (whose filename is thus foo.module) and "bar" is the name of the hook. Each hook has a defined set of parameters and a specified result type.
The available hooks to implement are explained here in the Hooks section of the developer documentation. The string "hook" is used as a placeholder for the module name in the hook definitions. For example, if the module file is called example.module, then hook_help() as implemented by that module would be defined as example_help().

Аватар пользователя graker graker 31 октября 2010 в 21:35

Быстро ты.

Насчет полезности я иначе считаю. Цикл-то про API, поэтому хотелось бы больше о работе с API, а не общие слова. Но хорошо, значит я уже не зря переводил Smile