Несколько месяцев назад, я читал интересную статью с обзором возможностей drupal, в которой упоминалось, что одна из киллер-фич drupal - это возможность inline редактирования из коробки. Эта возможность хорошо продается заказчику и помогает получать заказы на разработку в drupal. В этот же момент я словил себя на мысли, что мне очень неудобно редактировать статьи при их вычитке: смотришь на статью на публичной странице, а меняешь ее на странице в админке. Тогда я решил, что реализовать возможность inline редактирования - это достаточно хорошая идея.
Так как javascript не моя сильная сторона, то я стал смотреть в сторону уже готовых решений и попытке применить их к задаче. Я посмотрел на плагин Editable: этот плагин был сделан разработчиками октобера и предназначен для inline редактирования файлов встроенных в шаблон. При этом плагин был написан достаточно общо, чтобы его можно было взять за основу javascript части плагина.
Дальше возник вопрос, как лучше релизовать backend часть. Ее можно реализовать за счет прокси патерна, за счет самостоятельной реализации части функционала в компоненте или за счет постобработки выведенного текста с дополнениями вывода нужным кодом.
Вариант с самостоятельной функциональностью я отобросил сразу, как минимум потому, что это нарушает принцип не отсутствия дублирования кода. Вариант постобработки был очень привлекательным, однако в связи со структурой шаблона для вывода материала, этот вариант пришлось отставить. Поэтому в качестве реализации был выбран вариант с проксированием объекта.
Вариант с проксированием является достаточно компромиссным вариантом: с одной стороны он заставляет иметь минимальное дублирование ( в идеале достаточно просто единого интерфейса), с другой стороны в случае каких либо изменений в плагине блог, все изменения будут учтены при выводе публичной страницы.
Теперь я представляю плагин blog-editable. Он позволяет редактировать материалы статей прямо на публичных страницах.
Для того чтобы сделать что-то полезное, совсем не обязательно делать все с нуля, отказываясь от всего что было реализовано до этого. Часто достаточно правильно соединить те кусочки, которые уже есть, чтобы получать новое полезное целое.