Ruby on Rails: как добавить ссылку из пользовательского плагина в навигацию моего приложения? - PullRequest
1 голос
/ 21 февраля 2010

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

Приложение / просмотров / Shared / _navigation.html.erb

<ul id="navigation">
 <li><a href="#">Nav link A</a></li>
 <li><a href="#">Nav link B</a></li>
 <li><a href="#">Nav link C</a></li>
</ul>

Если у меня есть собственный плагин под названием «recipes» в моем файле vendor / plugins, и я хочу добавить это:

<li><a href="link_to_recipes">Recipes</a></li>

к указанному выше файлу _navigation.html.erb (после ссылки «Nav link C»), что мне делать?


Я считаю, что вы можете предоставить хуки в файле init.rb плагина, а также можете установить или зарегистрировать новые элементы в файле install.rb, но я не могу найти информацию о том, как установить плагин добавить ссылку на существующий файл _navigation.html.erb.

Я думаю, мне нужно изменить файл навигации на что-то вроде этого:

<ul id="navigation">
 <li><a href="#">Nav link A</a></li>
 <li><a href="#">Nav link B</a></li>
 <li><a href="#">Nav link C</a></li>
 <div id="links_from_plugins">
   <!-- links from plugins will go here -->
 </div>
</ul>

.. а затем каким-то образом добавить ссылки из init.rb плагина в идентификатор #links_from_plugins.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 21 февраля 2010

Вам придется изменить шаблон навигации, так или иначе. Там должна быть строка с надписью: «Здесь я хочу, чтобы появились дополнительные ссылки».

Метод снаружи представление, которое генерирует вывод для представление, по моему скромному мнению, всегда является помощником. Поэтому я бы хотел, чтобы плагин определял модуль RecipesHelper. Затем, начиная с init.rb, вы снова открываете модуль ActionView::Helpers и включаете свой RecipesHelper.

.

Наконец, ваш взгляд будет выглядеть так:

<ul id="navigation">
 <li><a href="#">Nav link A</a></li>
 <li><a href="#">Nav link B</a></li>
 <li><a href="#">Nav link C</a></li>
 <li><%= link_to_recipes %></li>
</ul>
1 голос
/ 21 февраля 2010

Вам необходимо предоставить больше информации. Из приведенных примеров видно, что нет необходимости беспокоиться даже о плагине. На самом деле в вашем вопросе нет ничего, что зависело бы от какой-либо информации из плагина.


Тем не менее, у вас есть законные вопросы о плагинах. Обычно плагины работают так: вы определяете ваши новые методы и классы в модулях, а затем включаете те модули в базовые классы Rails, которым они принадлежат.

Общая структура плагина выглядит следующим образом:

plugin/
  - Readme
  - init.rb
  - install.rb
  - test/
    - unit and functional tests
  - lib/
    - plugin source files
  - generators/
    - any generators you want to provide 

В вашем случае вы, вероятно, сделали что-то вроде следующего. Который при правильной структуре плагина находится в файле, как плагин / lib / recipes.rb

module Recipes
  def link_to_recipe 
    ..
  end
end

В плагинах init.rb вы хотели бы сделать это, чтобы добавить новый метод к доступным в представлениях:

 require 'lib/recipes.rb'
 ActionView::Base.send(:include, Recipies)

Rails будет иметь доступ ко всем генераторам из каталога плагина, и вы должны использовать init.rb (который загружается при автоматическом запуске Rails), чтобы загрузить библиотеки плагина и подключить его к базовому классу. install.rb используется для выполнения любых задач, которые ваш плагин должен выполнить после установки. Его выполнение запускается после того, как ваш пользователь установил плагин с script/plugin install. install.rb должен использоваться для копирования ресурсов, в значительной степени принадлежащих общедоступному каталогу. От этого зависит ваш плагин. Однако, если вы используете движки, тогда ваш плагин - это миниатюрное приложение Rails, и вам не нужно будет копировать ресурсы.

Из любопытства, вы собираетесь использовать этот модуль рецептов в более чем одном проекте? Если нет, то вам не стоит заниматься дополнительными задачами создания плагина. Вместо этого код принадлежит связанному вспомогательному модулю или RAILS_ROOT / lib

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...