Как добавить новую вкладку настроек в настройки проекта Redmine?

Я создаю плагин. Я хочу добавить любые настройки для него в настройки проектов. Я хочу создать новую вкладку со своими настройками в настройках проекта redmine. Я использую редмайн версии 3.1.0.devel. Что я могу для этого сделать?

обновлено:

Это код, который я создал с помощью @General Failure

require 'projects_helper'

module ProjectsHelperPatch
  def self.included(base)
    base.send(:include, InstanceMethods)
    base.send(:include, ApplicationHelper)

    base.class_eval do
      unloadable

      alias_method_chain :project_settings_tabs, :sph
    end
  end

  module InstanceMethods
    def project_settings_tabs_with_sph

      abort('asdasd')

      tabs = project_settings_tabs_without_sph

      tabs.push({ :name => 'some_name',
                  :action => :some_action,
                  :partial => 'projects/settings/some_page',
                  :label => :label_some_label })
      return tabs
    end
  end
end

ProjectsHelper.send :include, ProjectsHelperPatch

init.rb:

require_relative '../../plugins/sph/app/patches/controllers/projects_helper_patch'

Но его код не работает. Почему?


person jonua    schedule 19.10.2015    source источник


Ответы (1)


Вы можете исправить класс ProjectsHelper и добавить alias_method_chain в метод project_settings_tabs, см. тему на форуме Redmine. .

В :partial => 'projects/settings/some_page' частичным значением является относительный путь к вашему представлению в плагине, также его необходимо добавить в routes.rb.

Если у Вас еще остались вопросы, задавайте их в комментариях.


обновление:

Мое исправление Redmine (без добавления вкладки настроек, просто пример исправления):

require_dependency 'issues_controller'

module IssuesControllerPatch

  def self.included(base) # :nodoc:
    base.send(:include, InstanceMethods)
    base.send(:include, ApplicationHelper) # You can use helpers in patches

    base.class_eval do
      unloadable # Send unloadable so it will not be unloaded in development
      alias_method_chain :new, :patch
    end
  end

  module InstanceMethods

    def new_with_patch
        my_action # my code
        new_without_land_using # call original method
      end
    end

  end

end

IssuesController.send :include, IssuesControllerPatch

И init.rb ряд:

require 'patches/controllers/issues_controller_patch'
person General Failure    schedule 20.10.2015
comment
Я не могу пропатчить ProjectHelper с помощью Dispatcher, как это описано в вашей теме, потому что Dispatcher был удален в Rails 3 (насколько я понял) (использую rails v.4.2.4, забыл указать это, извините). - person jonua; 20.10.2015
comment
Да, но исправление Redmine работает так же без диспетчеризации, теперь я добавляю свой код для ответа - person General Failure; 20.10.2015
comment
Я добавил код, но он не работает. Где я сделал ошибку? - person jonua; 20.10.2015
comment
Вероятно, вы должны установить разрешения для новой вкладки, см. помощь. Мой код: project_module :my_plugin do permission :permission_name, {:my_controller => [:my_method]}, :public => true - person General Failure; 20.10.2015
comment
Может быть, ваш путь в аргументе require_relative неверен? Где ваши проекты_helper_patch.rb? Если в plugin_folder/lib/patches будет достаточно require 'patches/projects_helper_patch', полный путь от корня приложения не нужен. - person General Failure; 20.10.2015
comment
Давайте продолжим обсуждение в чате. - person General Failure; 20.10.2015
comment
Большое спасибо! Моя ошибка была в том, что я делаю require 'projects_helper' вместо require_dependenncy 'projects_helper' - person jonua; 21.10.2015