Типичная ситуация
Разработчик хочет, чтобы параметры пункта меню были доступны в представлении, но он пытается переопределить параметры компонента var (this-> params) вместе с этим параметром / классом. В этом случае пишет ненужный код делая сложный компонент. Другие параметры помещаются в файл (intheview.html.php), который включает в себя информацию о том, как использовать эту информацию.
Логично использовать
$params = JFactory::getApplication()->getMenu()->getActive()->getParams();
в default.php представления. Что позволяет:
$params->get('page_heading');
(ЕСЛИ это представление вызвано через пункт меню.)
Получить параметры пункта меню:
$app = JFactory::getApplication();
$menu = $app->getMenu() -> getActive ();
$params = $menu->getParams();
Получить параметры компонента:
$this->params = $this->state->get('params');
Объедините их в view.html.php -> функции отображения (взятой из view.html.php в представлении статьи):
$this->params = $this->state->get('params');
$active = $app->getMenu()->getActive();
$temp = clone $this->params;
if ( $active)
{ $currentLink = $active->link;
// If the current view is the active item and an article view for this article, then the menu item params take priority
// Если текущее представление является активным пунктом (меню) представления для этой статьи, то параметры пункта меню имеют приоритет
if (strpos( $currentLink, 'view=article') && strpos( $currentLink, '&id=' . (string) $item->id))
{
// Load layout from active query (in case it is an alternative menu item)
// Загрузить макет из активного запроса (в случае, если он является альтернативным пунктом меню)
if (isset( $active->query['layout']))
{ $this->setLayout( $active->query['layout']);
}
// Check for alternative layout of article
// Проверяем альтернативный макет статьи
elseif ( $layout = $item->params->get('article_layout'))
{ $this->setLayout( $layout);
}
// $item->params are the article params, $temp are the menu item params
// $item->params - это параметры статьи, $temp - параметры меню
// Merge so that the menu item params take priority $item->params->merge( $temp);
// Миграция, чтобы параметры этого меню имели приоритет $item->params->merge( $temp);
}
else
{
// Current view is not a single article, so the article params take priority here
// Текущее представление - это не удинственная статья, поэтому параметры статьи имеют приоритет здесь
// Merge the menu item params with the article params so that the article params take priority $temp->merge( $item->params); $item->params = $temp;
// Слияние параметров пункта меню с параметрами статьи, чтобы параметры статьи принимали приоритет $temp->merge( $item->params); $item->params = $temp;
// Check for alternative layouts (since we are not in a single-article menu item)
// Проверяем альтернативные макеты (поскольку мы не находимся в одном элементе меню)
// Single-article menu item layout takes priority over alt layout for an article
// Макет элемента с одним элементом имеет приоритет над макетом для статьи
if ( $layout = $item->params->get('article_layout'))
{ $this->setLayout( $layout);
}
}
}
else
{
// Merge so that article params take priority $temp->merge( $item->params); $item->params = $temp;
// Миграция параметров этой статьи для приоритета $temp->merge( $item->params); $item->params = $temp;
// Check for alternative layouts (since we are not in a single-article menu item)
// Проверяем альтернативные макеты (поскольку мы не находимся в одном элементе меню)
// Single-article menu item layout takes priority over alt layout for an article
// Макет элемента с одним элементом имеет приоритет над макетом для статьи
if ( $layout = $item->params->get('article_layout'))
{ $this->setLayout($layout);
}
}