Практически весь код Joomla комментирован в стандарте
phpDocumentor. И большинство IDE для php разработки позволяют пользоваться его возможностями — быстрая подстановка доступных констант, переменных, методов, удобное определение уровней видимости и т. д.
Но, надо признать, что структура Joomla не самая удобная для работы с IDE.
Например, штатным методом получаем в контроллере компонента объект модели
$model = $this->getModel();
IDE напрочь лишена возможности узнать что либо о объекте, который получила переменная
$model, и все удобства IDE при работе с
$model после этого пропадают.
А самый досадный для меня момент — файлы шаблона компонента
/com_mycomp/views/item/tmpl/default.phpв них работа с переменной
$this предполагается в контексте объекта
mycompViewItem extends JviewLegacy.
Но как объяснить IDE, что
$this — в этом файле, это тоже самое, что и в файле
/com_mycomp/views/item/view.html.php?
Что делать? Работать хочется комфортно, тем более что почти все условия созданы.
Вначале про контроллер и им подобные ситуации:
1. Можно в ручную подключить нужный файл и присвоить его переменной, это займет 2 строки:
require_once JPATH_COMPONENT.'/models/item.php';
$model = new mycompModelItem();
и можно работать с моделью со всеми прелестями и возможностями IDE. (Правда надо уточнить параметры, из контроллера модель вызывается в конфигурации ignore_request). Кстати, думаю, что этот путь должен работать быстрее, чем
$model = $this->getModel();
2. Но можно постараться получить тот же результат соблюдая стандарты Joomla.
Для этого достаточно после присвоения переменной дать DOC-блок, описывающий переменную
$model = $this->getModel();
/* @var $model mycompModelItem() */
Возможно разные IDE ждут этот блок в разных форматах. Т.е. Где-то потребуются двойные звездочки /** **/, где-то вначале объявление типа, а потом имени переменной.
В
NetBeans работает именно так.
Теперь про шаблон.
Аналогичным образом надо дать DOC-блок в начале файла шаблона default.php
<?php
defined('_JEXEC') or die('Restricted access');
/* @var $this mycompViewItem */
$this->loadTemplate('properties');
И сразу после этого
$this будет дополняться всеми
PUBLIC методами
JViewLegacy (Joomla 3.x).
Но
protected и private свойства и методы будут не доступны.
А например в
mycompViewItem были созданы
protected $item;
protected $form;
И они не отображаются в IDE для
$this.
Единственный способ, который я нашел — сделать их
public. Это конечное не хорошо, но классов расширяющих
mycompViewItem не предполагается, поэтому такое отступление от стандартов будет не критичным.
Возможно у кого-то есть более удобные наработки или какие-то другие IDE более настраиваемые в этой части. Предлагаю поделиться опытом.