Почему я должен использовать для этого Drupal Form API и Ajax framework, а не просто реализовывать собственное решение с вызовом node_save()?

Я хочу, чтобы пользователи могли отправлять узлы и комментарии через AJAX. Я также хочу сделать довольно обширную настройку узлов и форм комментариев.

Я потратил время на просмотр документации и примеров кода для API форм Drupal 7 и инфраструктуры Ajax, но я нахожу это очень сложным. Поэтому я просто хочу создать свою собственную форму в HTML и использовать свой собственный код JavaScript для ее отправки через Ajax. Я также настрою специальный URL-адрес для обработки этих запросов Ajax, который в конечном итоге вызовет node_save() или comment_save(), когда это необходимо.

Каковы недостатки этого способа по сравнению с использованием Form API и Ajax framework? Я не создаю модули для вклада в сообщество. Все только для моего собственного сайта.


person maxedison    schedule 13.02.2012    source источник


Ответы (2)


Я думаю, что обычный аргумент будет о переносимости, но если вы не собираетесь портировать эти модули на другой сайт Drupal, то я думаю, что это не так.

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

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

Если вы планируете часто использовать Drupal, я бы порекомендовал привыкнуть к FAPI... Через некоторое время использовать FAPI становится намного проще, чем писать собственный HTML.

person Clive    schedule 13.02.2012
comment
Я не планирую использовать Drupal за пределами этого сайта, поэтому ваш ответ в значительной степени поддерживает подход, которого я хочу придерживаться. Однако я не знал об одном вопросе, который вы подняли об атаках с подделкой межсайтовых запросов. Сложно ли защитить мой сайт/формы от этого? Можете ли вы указать мне ресурс для борьбы с этим? - person maxedison; 13.02.2012
comment
Я думаю, что это настолько сложно, насколько вы хотите, чтобы это было честно... хорошим местом для начала было бы Защита модуля Drupal от CSRF. Это специфично для Drupal, но объясняет общую проблему и то, как Drupal пытался компенсировать эту проблему. Там также есть несколько ссылок на другие ресурсы (опять же относящиеся к Drupal), которые объясняют, как развивалось/развивается мышление. Тогда всегда есть Википедия :) - person Clive; 13.02.2012
comment
Как насчет использования drupal_form_submit()? Будет ли это предлагать стандартную защиту Drupal от CSRF? - person maxedison; 14.02.2012
comment
drupal_from_submit не принесет вам никакой пользы, если вы не используете API формы для создания формы - person jakraska; 14.02.2012

Технически, да, вы можете сделать это без каких-либо побочных эффектов. Были времена, когда мне приходилось импортировать данные из фидов и использовать node_save вручную.

Что вы упускаете, так это гибкость, которую предлагает drupal. Например, хотите добавить в форму новый флажок, чтобы указать рекомендуемый элемент? Теперь вам нужно вручную обновить форму, чтобы добавить поле, и обновить обработчик отправки, чтобы сохранить данные. Если бы вы использовали систему drupal, она была бы автоматически заполнена для вас.

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

Система форм Drupals также позволяет добавлять более сложные элементы, такие как селекторы дат или даже управляемую загрузку файлов, что может сэкономить вам много времени после знакомства с API.

Если вы хотите просто завершить проект и не тратить время на изучение чего-то нового, конечно, вы можете сделать все это вручную. Я могу пообещать вам, что любой разработчик Drupal, который посмотрит на ваш код в будущем, будет иметь очень низкое мнение о вашей работе. В зависимости от вашей ситуации это может быть или не быть важным. Но на самом деле самое большое, что вы упускаете, — это простота обслуживания и гибкость.

Итак, просто подытожу:

плюсы:

  • это будет работать
  • быстро и просто
  • комфортный

минусы:

  • потеря гибкости
  • труднее поддерживать
  • невозможность воспользоваться преимуществами виджетов/хелперов форм друпалов
  • невозможность использования сторонних модулей
  • позор от других разработчиков
  • Недостаток сна из-за грязного чувства
  • вечное проклятье
person jakraska    schedule 13.02.2012