Я работаю с пользовательским внутренним шаблоном в Joomla, и теперь я пришел к выводу, что мне нужно поддерживать несколько языков.
В начале разработки я не думал о нескольких языках, и это доставляет мне некоторые проблемы. Я знаю, что лучше всего переписать код и сделать его «умнее», но на данный момент времени на переписывание этого кода не так много.
В бэкэнде я работаю с иконками, которые основаны на заголовке страницы. Например, страница Article Manager
просит иконку images/icon/article-manager.png
, Итак, вы видите, что происходит, если заголовок страницы, например, немецкий и называется Inhalt
,
На данный момент я использую этот код для генерации iconpath:
#Loading Joomla Document Module
$doc = JFactory::getDocument();
#Get the page title
$title = explode("-", $doc->title);
$title = trim(end($title));
#Generate icon path
$lastTitle = explode("-", $title);
if (strpos(end($lastTitle), ':')) {
$lastTitle = explode(":", end($lastTitle));
$lastTitle = $lastTitle[0];
$iconPath = trim($lastTitle);
$iconPath = 'templates/' . $this->template . '/images/icons/' . strtolower(str_replace(" ", "-", $iconPath)) . '.png';
} else {
$iconPath = trim(end($lastTitle));
$iconPath = 'templates/' . $this->template . '/images/icons/' . strtolower(str_replace(" ", "-", $iconPath)) . '.png';
}
Сейчас я думаю о поиске в базе данных по идентификатору страницы / componetent / modul / plugin, но есть ли более быстрый / простой способ отредактировать его?
Работа вокруг
Как уже говорилось ранее, значки, генерируемые заголовком страницы, действительно плохая идея. Но Lodder пришел с довольно хорошей и легкой работой вокруг. Поэтому я решил последовать его идее. Я добавил дополнительную переменную, которая проверяет, является ли она «подстраницей», если да, тогда она расширяет имя файла значков этой подстраницей.
#Loading Joomla Application Module
$app = JFactory::getApplication();
#Genrate page icon
$comp = $app->input->get('option');
$view = $app->input->get('view');
if(!empty($view)) {
$iconFileName = $comp . '-' . $view;
} else {
$iconFileName = $comp;
}
$iconPath = 'templates/' . $this->template . '/images/icons/' . $iconFileName . '.png';
Использование значков на заголовке страницы — плохая идея. Чисто потому, что, как вы уже упоминали, ваш сайт многоязычен, поэтому разные языки приведут к разным результатам.
Я бы лично основывал иконки на названии компонента. Например:
$jinput = JFactory::getApplication()->input;
$view = $jinput->get('option');
Приведенный выше код будет выводить com_content
и всегда будет одинаковым для всех языков.
Затем вы можете просто назвать свою иконку com_content.png и назовите иконки так:
$iconPath = 'templates/' . $this->template . '/images/icons/' . $view . '.png';
Надеюсь это поможет
Других решений пока нет …