0 Пользователей и 1 Гость просматривают эту тему.
  • 38 Ответов
  • 22656 Просмотров
*

beliyadm

  • Легенда
  • 9629
  • 1658 / 66
  • Севастополь == Россия
Туплю неимоверно.
Задача - сделать альтернативный шаблон вывода блога материалов и альтернативный шаблон для страниц полного материала после перехода в "подробнее" из этого альтернативного шаблона блога

1 часть проблем не вызывает, создал в html\com_content\category\ дубликаты файлов для blog_.php и изменил XML, в админке новый пункт меню прекрасно отображается и работает.
2-я часть и туплю. если в html\com_content\article\ создать файлы дубликат шаблона материала под названием catalog.php - то его можно выбирать в настройках материала как альтернативный шаблон.
Но, если в настройках материала оставить все по умолчанию, то при переходе из моего нового блога отображается дефолтный default.php
Если там же добавить дубликат catalog.xml для материала  - в настройках материала выбор шаблона пропадает, но можно выбрать альтернативный шаблон материала как ссылку меню.

Но ни в одном случае новый шаблон материала не подхватывается при переходе из альтернативного шаблона блога.
Пробовал в подробнее руками добавить параметр layout=catalog (index.php?option=com_content&view=article&id=5:laminat-1&catid=9&Itemid=107&layout=catalog) все равно работает стандартный default.php материала

Перелопатил кучу доков, не нашел решения, одни подобные вопросы висят.
Это вообще возможно?
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Записки нетрезвого кодера
Skype: beliyadm_pb
*

SDKiller

  • Живу я здесь
  • 2706
  • 329 / 5
  • ...ergo sum
По идее должны подватываться параметры пункта меню, который назначим категории материалу

\components\com_content\views\article\view.html.php - display()
Спойлер
[свернуть]

*

Shustry

  • Moderator
  • 6436
  • 744 / 3
Я так понял, нужно всем материалам из определённой категории назначить альтернативный макет. Это можно сделать двумя вышеописанными способами:
1. Для КАЖДОГО материала указывать вручную этот макет в опциях
2. Для КАЖДОГО материала назначить пункт меню (для этого собсно и нужен альтернативный xml). Тогда выбор шаблона в опциях материала недоступна.
Я решал эту задачу несколько иначе: в шаблоне материала ставлю проверку на имя, альяс или id категории и вывожу разную разметку.
Например:
Код: php
if (preg_match('/catalog/', $this->item->category_alias)) {
//шаблон «статьи» каталога
} else {
//статья обыкновенная
}
*

beliyadm

  • Легенда
  • 9629
  • 1658 / 66
  • Севастополь == Россия
т.е. проверять параметр лэйаут референса. Ну это опять велосипед.
да какая разница, я от категории пляшу
Код: php
//Получим родителькую категорию, если 9  отдадим другой HTML
jimport( 'joomla.application.categories' );
$categories = JCategories::getInstance('Content');
$cat = $categories->get($this->item->catid);
if ($cat->parent_id == 9) {
// альтернативный шаблон материала
} else {
// стандартный шаблон материала
}

Но хочется получить нормальное решение, в 3.хх понимаю аналогичная проблема
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Записки нетрезвого кодера
Skype: beliyadm_pb
*

beliyadm

  • Легенда
  • 9629
  • 1658 / 66
  • Севастополь == Россия
beliyadm, для примера может быть структура, когда каталогов несколько, и в каждом есть вложенные категории, тогда лучше layout использовать, т.к. id дает слишком жесткую привязку.
согласен, вариации разные.
Но это не отменяет главного - хардкодное условие, вот что плохо
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Записки нетрезвого кодера
Skype: beliyadm_pb
*

Shustry

  • Moderator
  • 6436
  • 744 / 3
Юр, внимательно. Я то на полигоне щас параллельно смотрю. Ты проверь сперва. А правильное решение будет такое:
Код: php
jimport( 'joomla.application.categories' );
$categories = JCategories::getInstance('Content');

$cat_layout = explode(':',json_decode($categories->get($this->item->catid)->params)->category_layout)[1];
Выглядит ацки конечно, зато реальный лэйаут родительской категории выводит.
--------------
Кстати реальное решение-то получилось. Далее проверяем, если лэйаут отличный от дефолтного, то подключаем подшаблон с этим же именем, иначе обычную статью. И всё.
« Последнее редактирование: 12.06.2013, 13:47:07 от Shustry »
*

SDKiller

  • Живу я здесь
  • 2706
  • 329 / 5
  • ...ergo sum
Альтернативное решение

Структура шаблонов:

1) с шаблонами категорий и назначением альтернативного макета для пунктов меню категорий оставляем как в первом посте

2) шаблон материалов:



Где item - переименованный дефолтный, catalog - требуемый альтернативный.

Содержимое файла default.php в данном случае:

Код: php
<?php
defined('_JEXEC') or die;

$active = JFactory::getApplication()->getMenu()->getActive();

if ($active->query['option'] == 'com_content' AND $active->query['view'] == 'category'
    AND (!empty($active->query['layout']) AND $active->query['layout'] != 'blog'))
{
    $tmp = explode(':', $active->query['layout']);      //e.g 'atomic:catalog'
    $layout = $tmp[1];                                     //'0'-index is current template, '1'-index is category layout

} else {
    $layout = 'item';           //renamed 'default' layout
}

$this->setLayout($layout);

echo $this->loadTemplate();

То есть мы берём назначенный пункту меню шаблон категории и в зависимости от него переопределяем шаблон материалу.

Результат:

Спойлер
[свернуть]

UPD: Могут быть непредсказуемые результаты если одной и той же категории будут назначены несколько пунктов меню (либо будет назначен пункт меню для категории и ещё пункт - отдельному материалу) -  getActive() может выбрать не тот пункт, который хотелось бы )
« Последнее редактирование: 12.06.2013, 15:40:07 от SDKiller »
*

Shustry

  • Moderator
  • 6436
  • 744 / 3
SDKiller, да-да! Я про меню тоже ведь подумал сперва. Хорошее решение.
*

Fedor Vlasenko

  • Живу я здесь
  • 3844
  • 730 / 7
  • Все начинается с Value
Берем номер категории выводим шаблон. Нет шаблона выводим по умолчанию
Решение аналогичное данной ситуации
Другой шаблон для пункта меню
Добавил пример default.php
Код: php-brief
<?php
defined('_JEXEC') or die;
//х.з php
$dir = dirname(__FILE__);
include $dir.'/template'.(( !JFile::exists($dir.'/template'.$this->item->catid.'.php')? '': $this->item->catid).'.php';
теперь для создания шаблона категории 10 стоит создать файл template10.php. Шаблон по умолчанию template.php (в смысле грузится будет, выбор автоматически от категории)
*

Taatshi

  • Глобальный модератор
  • 5252
  • 480 / 1
  • Верстаем и кодим. Обращайтесь ;)
К нынешнему моменту что-нибудь вменяемое для переопределения полного материала из категории появилось или по-прежнему бьем в бубен?
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

dieman

  • Захожу иногда
  • 136
  • 9 / 0
А как быть, если главная — это "блог категории", при этом есть модуль, который нужно показывать только на главной, а он показывается соответственно на всех страницах "подробнее"?
Публиковать все материалы из этой категории в меню конечно не вариант.
*

Fedor Vlasenko

  • Живу я здесь
  • 3844
  • 730 / 7
  • Все начинается с Value
А как быть, если главная — это "блог категории", при этом есть модуль, который нужно показывать только на главной, а он показывается соответственно на всех страницах "подробнее"?
Публиковать все материалы из этой категории в меню конечно не вариант.
Joomla 2.5 - проверка на главную страницу
*

dieman

  • Захожу иногда
  • 136
  • 9 / 0
Joomla 2.5 - проверка на главную страницу

    <?php if(JURI::current()== JURI::base()){ ?>
123
    <?php } ?>
Тупанул, вот так все заработало. Спасибо.
« Последнее редактирование: 01.09.2014, 13:24:42 от dieman »
*

bandanu

  • Захожу иногда
  • 163
  • 3 / 0
Вывожу через пункты меню категории, соответственно создаю файлы bloggal.php и blogmas.php в шаблоне папка category. Категории выводятся как надо одна и другаю. Проблема с выводом материала, для обеих категорий используется один default.php. Решение SDKiller не доходит до меня, как заставить для
категории bloggal.php грузить свой шаблон материала, допустим тоже gal.php, а для категории blogmas.php грузить свой шаблон материала, допустим тоже mas.php. Подскажите
« Последнее редактирование: 04.04.2015, 12:16:10 от bandanu »
*

Shustry

  • Moderator
  • 6436
  • 744 / 3
Я в пятом ответе давал универсальное решение.
*

bandanu

  • Захожу иногда
  • 163
  • 3 / 0
 Я понимаю, что такие как я вас достали, но напишите в какой файл вставлять код, как он выбирает нужный шаблон  и как надо назвать альтернативный шаблон категории и материала, чтобы все работало? Спасибо.
*

beliyadm

  • Легенда
  • 9629
  • 1658 / 66
  • Севастополь == Россия
Я в пятом ответе давал универсальное решение.
Ну не знаю, у меня это не работает, первый уровень еще просто проверить, а кучу вложенных уже сложно.
Да и непонятно, почему уровню меню "блог" можно сделать свой шаблон, а материалу по умолчанию нет
Приходится в дефолт.пхп писать проверку на родительскую категорию (обычно у меня "все товары") и от нее плясать в одном файле
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Записки нетрезвого кодера
Skype: beliyadm_pb
*

Shustry

  • Moderator
  • 6436
  • 744 / 3
Везде всё должно работать. По просьбам, мануал:

1. Копируем файл components\com_content\views\article\tmpl\default.php в templates\шаблон\html\com_content\article\
2. После запрета доступа (defined('_JEXEC') or die;) вставляем:

Код: php
jimport( 'joomla.application.categories' );
$categories = JCategories::getInstance('Content');
$cat_layout = explode(':',json_decode($categories->get($this->item->catid)->params)->category_layout)[1];

3. Теперь всё, что ниже выносим в подшаблон (сразу пару сделайте). Файлы назовите например: default_all.php и default_tovar.php.

4. В default.php вместо вынесенного вывода контента пишем условие подключения подшаблонов:

Код: php
if ($cat_layout) {
echo $this->loadTemplate('all');
} else {
echo $this->loadTemplate($cat_layout);
}

Всё. Теперь, если у категории указан в админке шаблон вывода tovar, то будет грузиться подшаблон default_tovar.php. От уровня категории не зависит. Материал в ком_контенте всегда принадлежит одной категории.
*

Taatshi

  • Глобальный модератор
  • 5252
  • 480 / 1
  • Верстаем и кодим. Обращайтесь ;)
В Joomla 3 не работает. Если альтернативный макет стоит "по умолчанию" - страница материала не грузится.

UPD

У меня заработало так

Код: php
jimport( 'joomla.application.categories' );
$categories = JCategories::getInstance('Content');
$cat_layout = explode(':',json_decode($categories->get($this->item->catid)->params)->category_layout)[1];

if ($cat_layout == 'blog' or $cat_layout == 'default' or !$cat_layout ) {
echo $this->loadTemplate('all');
}
else  {
echo $this->loadTemplate($cat_layout);
};

Только раздражает notice при отсутствии переменной при установке макета "По умолчанию"

Цитировать
Notice: Undefined offset: 1 in W:\domains\site.ru\templates\mytemplate\html\com_content\article\default.php on line 13

Понятно, что появляется ввиду отсутствия второго элемента в массиве. Надо проверку проводить на наличие перед присваиванием.
« Последнее редактирование: 25.05.2015, 12:36:58 от Taatshi »
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

beliyadm

  • Легенда
  • 9629
  • 1658 / 66
  • Севастополь == Россия
Всё. Теперь, если у категории указан в админке шаблон вывода tovar, то будет грузиться подшаблон default_tovar.php.
То есть указать для категории новый шаблон без переопределения шаблона вывода в меню (альтернативного шаблона блога меню)?
Завтра попробую, вроде пытался так делать, какой-то затык был
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Записки нетрезвого кодера
Skype: beliyadm_pb
*

yiuryumtsev

  • Новичок
  • 1
  • 0 / 0
Код: php
if ($cat_layout) {
echo $this->loadTemplate('all');
} else {
echo $this->loadTemplate($cat_layout);
}
Вот тут местами поменять условия и все заработает

Код: php
defined('_JEXEC') or die;
jimport( 'joomla.application.categories' );
$categories = JCategories::getInstance('Content');
$cat_layout = explode(':',json_decode($categories->get($this->item->catid)->params)->category_layout)[1];


if ($cat_layout) {

echo $this->loadTemplate($cat_layout);
} else {

echo $this->loadTemplate('all');

}
Тем же способом в файле category\blog_item.php переопределяем вывод анонсов материала в блоге категорий с дефолтным пунктом меню "Блог категории"
« Последнее редактирование: 27.10.2015, 10:25:03 от yiuryumtsev »
*

liberator

  • Захожу иногда
  • 208
  • 3 / 0
Ребят, спасибо за тему и за разбор полётов) читал много, не нашел нужной задачи: для одной категории мне нужен один шаблон, для другой категории - другой шаблон.
Как это реализуется? вижу в меню есть default собственно у меня в папке уже есть и он оттуда и берется http://prntscr.com/a14nqm и http://prntscr.com/a14o3k
не могу понять как помимо переопределённого дефолтного еще один (альтернативный добавить?) и как система поймет, что это именно для категории (блог категории) шаблон?
Спасибо, если непонятно - дополню.
*

beliyadm

  • Легенда
  • 9629
  • 1658 / 66
  • Севастополь == Россия
liberator - если вы умеете переоформлять один шаблон, значит умеете все
в папку \templates\шаб\html\com_content\category
кладете копии файлов из \components\com_content\views\category\tmpl
К примеру, вы хотите получить новый шаблон блога материалов категории, значит файлы что вам нужны blog.php blog.xml blog_item.php (это минимальные три файла, есть еще чилдрен и линкс)
Эти файлы переименовать в blog1.php blog1.xml blog1_item.php
В файле blog1.xml изменить строку 3
Код: xml
<layout title="COM_CONTENT_CATEGORY_VIEW_BLOG_TITLE" option="COM_CONTENT_CATEGORY_VIEW_BLOG_OPTION">
параметр title (не забыть сохранить файл в УТФ8)
все, у вас в списке типов пунктов меню появится ваш новый ТИТЛ, как вы его назвали
И так до бесконечности, хоть сотню шаблонов блога создавайте

Вообще в Google статей на тему шаблонизации полно, данная же тема немного глубже и таких базовых вопросов не касается
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Записки нетрезвого кодера
Skype: beliyadm_pb
*

liberator

  • Захожу иногда
  • 208
  • 3 / 0
liberator - если вы умеете переоформлять один шаблон, значит умеете все
в папку \templates\шаб\html\com_content\category
кладете копии файлов из \components\com_content\views\category\tmpl
К примеру, вы хотите получить новый шаблон блога материалов категории, значит файлы что вам нужны blog.php blog.xml blog_item.php (это минимальные три файла, есть еще чилдрен и линкс)
Эти файлы переименовать в blog1.php blog1.xml blog1_item.php
В файле blog1.xml изменить строку 3
Код: xml
<layout title="COM_CONTENT_CATEGORY_VIEW_BLOG_TITLE" option="COM_CONTENT_CATEGORY_VIEW_BLOG_OPTION">
параметр title (не забыть сохранить файл в УТФ8)
все, у вас в списке типов пунктов меню появится ваш новый ТИТЛ, как вы его назвали
И так до бесконечности, хоть сотню шаблонов блога создавайте

Вообще в Google статей на тему шаблонизации полно, данная же тема немного глубже и таких базовых вопросов не касается
Спасибо, но не работает, сделал копию файлов (до этого уже так делал и шаблонизацию понимаю - сам процесс, но как НЕСКОЛЬКО шаблонов той же категории сделать - не совсем понимаю)
http://prntscr.com/a1gp50 = 3 файла скопировал, поменял параметр title не высвечиваетя в списке выбора шаблонов новый шаблон, только старые http://prntscr.com/a1gpw7
*

liberator

  • Захожу иногда
  • 208
  • 3 / 0
Шаблон для раздела категорий - не базовый вопрос, в любом случае за попытку помочь спасибо. Почему то с джумлофорумом всегда происходит ситуация самопомощи, сам задал вопрос, сам на него же и ответил... Итоговый ответ нашел в хорошей статье по шаблонизации категорий http://zaurmag.ru/joomla/pereopredelenie-shablonov-v-joomla.html и не только категорий но и статей.
Вопрос этот глубже, чем хотелось бы и чем казалось бы :) реализовал с помощью вышеуказанной статьи.
*

Mitriy-Bug

  • Захожу иногда
  • 90
  • 1 / 0
  • Верстка сайтов на Joomla
liberator - если вы умеете переоформлять один шаблон, значит умеете все
в папку \templates\шаб\html\com_content\category
кладете копии файлов из \components\com_content\views\category\tmpl
К примеру, вы хотите получить новый шаблон блога материалов категории, значит файлы что вам нужны blog.php blog.xml blog_item.php (это минимальные три файла, есть еще чилдрен и линкс)
Эти файлы переименовать в blog1.php blog1.xml blog1_item.php
В файле blog1.xml изменить строку 3
Код: xml
<layout title="COM_CONTENT_CATEGORY_VIEW_BLOG_TITLE" option="COM_CONTENT_CATEGORY_VIEW_BLOG_OPTION">
параметр title (не забыть сохранить файл в УТФ8)
все, у вас в списке типов пунктов меню появится ваш новый ТИТЛ, как вы его назвали
И так до бесконечности, хоть сотню шаблонов блога создавайте

Вообще в Google статей на тему шаблонизации полно, данная же тема немного глубже и таких базовых вопросов не касается
Спасибо, работает. На Joomla 3.5 тоже
*

DK-Scorp

  • Захожу иногда
  • 231
  • 6 / 0
  • Всегда готов! К чему только....? ХЗ.....
Всегда думал почему то что тут все просто, однажды просто вынеся шаблон из компонента в папку шаблона, но вот встала задача выдать свои шаблоны блогу категорий (каждому свой) и соответственно материалам в них.
С категориями более менее разобрался, решение beliyadm работает, добиться вывода своего шаблона в настройках категории у меня так и не получилось, только через меню, но вот с материалами все оказалось куда сложней,
не добился ни вывода своего шаблона в настройках материалов, ни в настройках категорий (т.е. в настройке "Альтернативный макет" категории и материала - ничего не появилось).
Вариант Shustry не сработал на денвере и J3.6.2, точнее вот это:
Код: php
$cat_layout = explode(':',json_decode($categories->get($this->item->catid)->params)->category_layout)[1];
Выдает 500 ошибку и все, поступил следующим образом - создал файл шаблона статьи с id категории, при выводе проверяю его наличие и подключаю (в моем случае-примере это default_cat9.php), т.е. если я например вывожу статью из категории 9, проверяю наличие шаблона и подключаю его если он есть.
Вот код default.php возможно пригодится кому-то еще:
Код: php
$app = JFactory::getApplication();
$template = $app->getTemplate();
$templateparams = $app->getTemplate(true)->params;

$file = '/templates/' . $template . '/html/com_content/article/default_cat'.$this->item->catid.'.php';
if (JFile::exists(JPATH_ROOT.$file)) {
echo $this->loadTemplate('cat'.$this->item->catid);
} else { Здесь все остальное содержимое default.php }
Вставляем после проверки на прямое обращение или до вывода разметки.

Теперь вопрос к знатокам:
как вывести путь к шаблону из массива $this?


P.S. Идея отличная (не моя, а общая :-) ), но реализация - через опу.... + какая-то нелогичность настроек и запутанность - ну сделали бы тупо в настройках категории выбор шаблона и подрубался бы он и в блогах и статьях, без лишней настройки в меню
« Последнее редактирование: 27.08.2016, 07:50:25 от AlekVolsk »
*

hoi

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Доброго времени суток

Столкнулся со следующей проблемой. Хочу создать свой макет блога категории. После всех необходимых действии на странице блога у меня появляется все что я прописывал в нужных файлах php. Так же отображаются все данные которые выводятся для категории, а вот сам список материалов категории пуст. И показывается соответствующее сообщение. причем достаточно мне изменить имена всех переопределенных файлов на оригинальное "blog.php" и т.д. все начинает отображаться.

Я уже попробовал переопределить просто оригинальный файл и результат оказался такой же. По коду я понял откуда Joomla берет материалы. Проверил на переименованных файлах, и там эта часть массива оказалась пустой. отсюда и сообщение что материалов нет. На данный момент не могу понять в каком направлении нужно двигаться.

Действия при которых все еще работает:
  • Копирую файлы по адресу "templates/tpl/html/com_content/category/blog.php" и все остальные файлы через "_" + .xml файл
  • Делаю изменения в "blog.xml"
Код
<layout title="COM_CONTENT_CATEGORY_VIEW_BLOG2_TITLE" option="COM_CONTENT_CATEGORY_VIEW_BLOG2_OPTION">
  • после чего появляется ной тип в пунктах меню
  • Выбираю этот тип и выбираю категорию которая будет отображаться
После всего этого все отлично работает подгружаются именно переопределенные файлы.
Теперь настало время просто переименовать все файлы что бы получился свой полноценный макет и вот после этого материалы исчезают. Пробовал разные танцы с настройкой пункта меню в целом все одинаково. Достаточно поменять имена файлов обратно опять все работает нормально. Но такой вариант позволяет создать только одно работающее переопределение, а мне их нужно 3.
« Последнее редактирование: 20.03.2020, 18:05:49 от hoi »
*

beliyadm

  • Легенда
  • 9629
  • 1658 / 66
  • Севастополь == Россия
Как у вас называются эти три базовых переопределенных файла?
Например по полной аналогии с blog (именно и только "blog" в названии файлов меняется на ваше название)
afisha.xml
afisha.php
afisha_item.php
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Записки нетрезвого кодера
Skype: beliyadm_pb
*

hoi

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Как у вас называются эти три базовых переопределенных файла?
Например по полной аналогии с blog (именно и только "blog" в названии файлов меняется на ваше название)
afisha.xml
afisha.php
afisha_item.php
Да
то есть
blog2.php
blog2.xml
blog2_item.php
Остальные файлы пробовал тоже добавлять
blog2_links.php
blog2_children.php
но как я знаю они не обязательны.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Цена на создание шаблона по практически готовому HTML

Автор biga

Ответов: 0
Просмотров: 2056
Последний ответ 08.04.2014, 17:03:53
от biga
Чем заменить языковую строку при переделке шаблона под HTML5?

Автор borro

Ответов: 2
Просмотров: 2312
Последний ответ 06.04.2014, 22:09:18
от Fedor Vlasenko
Тактика создания шаблона?

Автор Andrey_Li

Ответов: 13
Просмотров: 8844
Последний ответ 09.01.2014, 18:03:47
от Очередной вебмастер
Есть ли простой способ загрузки файла для стиля шаблона?

Автор dmayak

Ответов: 14
Просмотров: 2944
Последний ответ 31.10.2013, 19:08:14
от artel-st
Ширина верхнего меню короче ширины шаблона (Beez2)

Автор Bozhkov2

Ответов: 0
Просмотров: 1643
Последний ответ 07.06.2013, 15:29:17
от Bozhkov2