Pull to refresh

Comments 24

а почему в tpl-файлах не использовалась функция l()? Вместо:

Получилось бы

l($url->name, «rss_feeds/{$url->id}/items», array('attributes' => array('target' => '_blank')));

Плюс на сабмите форм используйте $form_state['redirect'] вместо drupal_goto(). drupal.stackexchange.com/a/30938
Я только начинаю изучение Drupal. Учту, буду совершенствоваться.
Почему статей мало? Вы же сами приводите ссылку на drupal.org, там есть очень подробный и понятный раздел по созданию модулей для текущей версии: drupal.org/node/1074360
Там нету примеров создания таблицы в БД, прикрепления JS, создания переводов. Хотелось бы увидеть все это все в цельной статье, а не искать по кусочкам, как я и делал. Тем более на русском более понятно, нежели на английском.
Там нету примеров создания таблицы в БД

Надо быть внимательнее, в том же меню есть:
drupal.org/node/876250

В функции rss_list в theme('table') рекомендую добавлять параметр Empty, на тот случай если запрос окажется пустой.

Вообще сам хотел попасть на Хабр с подобной статьёй. Но как ни брался, понимал, что все, что я хотел написать есть на Drupal.org. Например к некоторым хукам в комментариях обязательно есть ссылка на более подробную документацию к этому хуку.

Почему вы не использовали hook_permission? Получается вашим модулем может пользоваться только администратор. И вообще одна из фишек, за которые я люблю Друпал, это то, что к любому полю формы можно через атрибут #access настроить права доступа. И не надо «корячится» с IF-ами.
Хотелось написать цельную статью по созданию модуля, нежели «бегать» по разным ссылкам. Да и не все хорошо знают английский.

Permission настроен специально, чтобы добавлять ленты мог только администратор, а пользователи только читать их.
Еще небольшой фикс в hook_install. Нашел когда-то в документации:
//Don't put a comma after primary key definition, since doing so will cause database errors.
(Не ставьте запятую после объяления primary key, это может вызвать ошибки в базе данных).

Должно быть так:

<?php
$schema['rssfeeds'] = array(
        'fields'      => array(
            'id'         => array('type' => 'serial', 'not null' => TRUE),
            'name'       => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE),
            'url'        => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE),
            'created_at' => array('type' => 'int', 'not null' => TRUE),
            'updated_at' => array('type' => 'int', 'not null' => TRUE),
        ),
        'primary key' => array('id')
    );



И желательно для serial, int указывать размер — 'size'=>'normal'(big и т.п.).
Спасибо, исправил. Но size вроде бы по умолчанию стоит normal.
абсурдное замечание, пример, в котором было подсмотренно — устарел (для Д6) и данный комментарий в нём говорит лишь о компетенции автора
данный комментарий в нём говорит лишь о компетенции автора

Возможно, но я не могу судить о компетенции автора, так, как вы. Хотя бы потому, что с ним лично не знаком и спросить мне не у кого (вы же участвуете в разработке ядра и больше знакомы с другими разработчиками). На самом деле есть запятая или нет ее, для PHP нет никакой разницы, поэтому хуже не будет.

И да, скорей всего, это перешло при переносе модулей на Drupal 7. Спасибо, буду знать.
Написание модуля для Drupal — свежо и молодёжно.
image
Перейдём к ревью:

все новые модули, которые Вы хотите добавить, должны находиться в этой папке

Не обязательно.

создаем файл rss_feeds.info

Оберните в тег code, хабрапарсер побил кавычки.

files[]= rss_feeds.module

Тут могу ошибаться, но файл модуля указывать совсем не обязательно.

Вы прогоняли свой модуль через coder или другой инструмент? Кодинг-стандарт у вас не друпальный.

Некоторые ваши функции имеют просто префикс rss_*, с rss_load() понятно, а rss_list() и rss_content()?
RxB знает о чем говорит. :)
Можешь немного расписать свое видение на данный момент — ты перешел на RoR?
Только свои мелкие задачи.
Стреляю из пушки по воробьям — бекенды к скриптам.
Пул RoR заказчиков не так наработан у меня как друпальный, в связи с чем и сижу на друпале.
К D8 присматривался уже? Там ведь Symfony Components внутри.
Ставил первую альфу.
Но как код писать ещё не смотрел.
Все писали свой первый модуль, тут нет ничего зазорного и слоупочного.

Тут могу ошибаться, но файл модуля указывать совсем не обязательно.

В files[] нужно прописывать только файлы с классами (типа хэндлеров Views). *.module, *.token.inc, *.variable.inc и т.д. подсасываются сами.

Из rss_feeds_uninstall можете всё удалять. Указанные вами вещи друпал 7 сделает сам.

rss_feeds_schema

Вы свой модуль запускали вообще?
return $schema хоть напишите.

Подробнее о hook_form().

hook_form вы не используете.

drupal_goto

$form_state['redirect']

В целом отлично для начала. Успехов!
Ну, о практической пользе модуля рассуждать, конечно, не приходится. Лучший способ научиться писать модули — это читать другие модули, написанные опытными разработчиками имеющие большое количество установок.
Спасибо, return забыл написать. Исправил.

И спасибо за напутствие!
На счет первого замечания согласен, можно не только в этой папке. А на счет обязательности .info файла… Я описывал конкретно свой взгляд на разработку модуля, а не дополнение к документации Drupal.

По третьему замечание — все верно выводит. Там кавычки не нужны.

Кодинг-стандарта как такового нету. Это IDE форматировала код таким образом. Я не делал на этом акцент, в будущем буду обращать внимание.

Функции rss_list() и rss_content() это функции отображения страницы. Я так назвал их в хуке меню.
Ох и наворотили же вы.
Во-первых, для чтения и вывода RSS есть модуль «из-коробки».
Во-вторых, хоть код и не ужасен, но очень многое сделано криво.
Опыт — сын ошибок трудных. Вон сколько уже человеку подсказали всего.
Согласен, всем спасибо. Много полезного извлек!
Добро пожаловать в секту Drupal:)
Sign up to leave a comment.

Articles

Change theme settings