Tagged: drupal

Drupal JavaScript API for Grails

Это наверное самая стрёмная хрень которую я когда либо кодил: плагин для Grails который добавляет JS API от Drupal.

Дело в том что у Grails есть фундаментальная проблема: это CMF а не CMS. Т.е. после установки ты не можешь красивенько зайти и просто накликать контент. Всё нужно хардкодить. Я уверен это плохо и сильно тянет проект вниз.
А вот Drupal, несмотря на то что он написан на PHP, великолепный фреймворк. И есть чему у него поучится.
По крайней мере это единственная универсальная CMS мною виденная: хочешь делай блог, хочешь — визитку, магазин? Да на тебе пожалуйста!
Справедливости ради стоит сказать что видел я не так много CMS’ок.

И естественно в революционных умах возникают мысли перенять опыт из Drupal в Grails:
* Ставят плагин для PHP
* Ругаются в email листах
* А вот наш индийский коллега даже объявил что сделает CMS’ку. Но как то он пропал.

Сегодня. когда мне понадобилось снова изобретать велосипед который есть в Друпале, я плюнул и полностью нафиг перенёс drupal.js и написал обрезаную версию функции drupal_add_js.
И выложил на GitHub, дабы индийскому коллеге было что форкать 😉

Пример

class IndexController {

    def drupalJsService

    def index() {
        drupalJsService.addJs([someIntegerValue: 42], 'setting')
        drupalJsService.addJs('alert(Drupal.settings.someIntegerValue);', 'inline')
    }

}

И это превращается:

<html>
<head>
  <script src="/plugins/jquery-1.8.3/js/jquery/jquery-1.8.3.min.js" type="text/javascript"></script>
  <script src="/plugins/drupal-js-0.1.2/js/drupal/drupal.js" type="text/javascript"></script>
  <script type="text/javascript">
    jQuery.extend(Drupal.settings, {"someIntegerValue":42});
    alert(Drupal.settings.someIntegerValue);
  </script>
</head>
</html>

Ахтунг!
Плагин включает jQuery.noConflict(), поэтому оборачивайте всё в такой код

(function ($) {
...
})(jQuery);

По ходу роста проекта буду подпиливать его. Потом по хорошему нужно будет поднимать обсуждение и переносить функционал в Resources plugin.

Реклама