2013-08-09 6 views
3

Хорошо, это то, что я чувствую, что я должен спросить, поскольку я не мог найти никакой ссылки на это в какой-либо документации и прочтении фактического кода, чтобы выяснить, как наилучшим образом выполнить это займет гораздо больше времени, чем надеется потратить.Joomla com_user, распространяющийся подобно com_categories и com_content

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

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

Итак, мой вопрос заключается в том, что com_content и com_categories используют параметр расширения. Можно ли добавить аналогичную функциональность без полного переопределения ядра com_users? Если я полностью переопределяю, есть вероятность того, что некоторые расширения не будут работать из-за зависимости от пользователей.

Я хочу уточнить, если что-то не имеет смысла, этот вопрос больше, чтобы увидеть, насколько вы можете «расширить» Joomla без переопределений.

UPDATE:

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

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

Примечание. Проблема с добавлением переопределения к пользовательскому представлению состоит в том, что у него есть 5-6 других компонентов MVC, на которые он опирается, поэтому в целях упрощения обновления с помощью обновлений ядра com_users лучше избегать если вообще возможно.

Еще одна вещь, необходимая для того, чтобы найти файл языка для com_users и добавить все записи в свой компонент.

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

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

Что было бы простым способом интегрировать базовый компонент в пользовательский компонент и проложить маршрут через этот компонент с минимальными изменениями основного компонента.

ответ

1

Я не совсем ясно, на что вы хотите, но если вы говорите о панели инструментов подменю как это в com_content:

com_content submenu

На примере вы даете Категорий (т.е.com_categories) добавлена ​​специальная поддержка, по которой вы можете перейти по ссылке com_catgories с вашим идентификатором расширения (extension=com_mycomponent), и он загрузит меню боковой панели для вашего расширения. Это так основные категории могут использоваться совместно с различными компонентами [see Add Categories].

Вы, возможно, уже известно о следующем, но, если вы хотите знать, как добавить в меню боковой панели на ваш взгляд менеджера компонентов, которые можно назвать JHtmlSidebar::addEntry($title, $link, $active);

Обычно это помещается в расширениях первичный вспомогательный файл в функция, которая называется addSubmenu($vName) (это то, что &, где com_categories будет искать для отображения подменю вашей панели инструментов). Его называют addSubmenu(), потому что sidebar превратился из подменю панели инструментов в предыдущих версиях Joomla.

, например. это addSubmenu() метод в ContentHelper классе определен в administrator/com_content/helpers/content.php

/** 
* Configure the Linkbar. 
* 
* @param string $vName The name of the active view. 
* 
* @return void 
* @since 1.6 
*/ 
public static function addSubmenu($vName) 
{ 
    JHtmlSidebar::addEntry(
     JText::_('JGLOBAL_ARTICLES'), 
     'index.php?option=com_content&view=articles', 
     $vName == 'articles' 
    ); 
    JHtmlSidebar::addEntry(
     JText::_('COM_CONTENT_SUBMENU_CATEGORIES'), 
     'index.php?option=com_categories&extension=com_content', 
     $vName == 'categories'); 
    JHtmlSidebar::addEntry(
     JText::_('COM_CONTENT_SUBMENU_FEATURED'), 
     'index.php?option=com_content&view=featured', 
     $vName == 'featured' 
    ); 
} 

Для сравнения: com_categories вспомогательного класс CategoriesHelper имеет совсем другой addSubmenu() метода, который выглядит для расширений телефонных основного вспомогательного класса (если один не нашла его по умолчанию до com_content).

Существует не какой-либо поддержки, как, что в com_users, так что вы, возможно, придется создать плагин системы, что пожары onAfterRoute и добавляет на основе ваш пункт подменю имеет ли или не ваш компонент при условии, подходящий параметр, как extension=com_myextension. Это было бы немного swizzle, но это должно сработать - единственное, что вы добавляете подменю, прежде чем компонент отправит ваш новый элемент подменю, всегда будет первым элементом в подменю com_users. Это не будет полная замена, например, com_categories.

К сожалению, нет никаких триггеров в com_users, которые я могу найти, что было бы полезно, если вы запустили все меню боковой панели.

Следующий вариант - использовать что-то вроде Donald Gilbert's gist to create a system plugin that allows you to override any core class, создав собственную заменяющую версию - очевидно, что это будет иметь проблемы с любыми значительными обновлениями, но если вы будете осторожны, вы можете ограничить переопределение вашей конкретной ситуации.

Если этого недостаточно/overkill, вы можете попробовать системный плагин, который отвечает на onAfterDispatch, в этот момент у вас будет страница перед ее возвратом в браузер, и вы можете взломать HTML-код, но это очень уродливо и быть склонным к если пользователи меняют свой шаблон администратора.

Конечно, я мог быть совершенно не прав, и theres лучший способ сделать это в 3.x. Может быть, кто-то еще зазвонит.

+0

Да, причина в этой проблеме заключается в том, что мой компонент интегрируется непосредственно с пользователями, поэтому наличие возможности перехода между компонентом и пользователями является ключевым. Это, вероятно, не поможет моей ситуации, но это очень четкое объяснение функциональности расширений, так что палец вверх! –

+0

Вы хотите просто добавить вкладку с видом из другого внутреннего роуля, который вы хотите объявить пользователям как вкладку на своем расширении? Я немного смущен тем, что вы хотите d, – Elin

+0

Если вы заходите в диспетчер пользователей и нажимаете на «users», что «view» я хочу использовать в своем расширении, так как компонент обрабатывает многие пользовательские надстройки было бы чрезвычайно удобно рационализировать его. Я уже сделал что-то вроде переопределения, и он работает, но у меня есть проблема с возвратом к моему компоненту при его сохранении (поскольку я не маршрутизирую «пользовательский» просмотр только в виде списка «users»). –