Каждому разделу — свой com_content_read.tpl
Сам вопрос задал: instantcms.ru/forum/thread4681.html
Сам и отвечу.
В общем суть проблемы ясна, иногда очень нужно, чтобы оформление статей в разделах отличалось. В моем случае, раздел видео, и не нужно чтобы изображение видео выводилось при подробном просмотре видео.
Первым делом делаем бэкап базы и сайта мало ли
Идем в базу данных в phpmyAdmin и выполняем запрос:
В созданном поле tpl будем хранить шаблон оформления страницы, по умолчанию com_content_read.tpl
Править будем следующие файлы:
1) admin/applets/cats.php — тут добавим в админке поле для выбора шаблона
2) components/content/frontend.php — тут поправим формирование страницы статьи, а именно ее обработку в smarty
3) components/content/model.php — тут нужно поправить запрос к бд, чтобы данные из нашего поля tpl подтягивались
4) core/classes/page.class.php — тут нужно добавить функцию, которая будет искать в папке components наши шаблоны оформления статей, имеющие вид com_content_read......tpl
Копируем файл com_content_read.tpl из дефолтного шаблона в наш, в папку components ( если нет, то создать ее), создадим его копию и переименуем, например com_content_read_novosti.tpl С помощью этого шаблона в дальнейшем будем оформлять видео новости
Итак, правим файлы по шагам
1) Добавляем в admin/applets/cats.php после кода (примерно 474 строка)
следующий код
2) Заменим в components/content/frontend.php строку (примерно 262 строка)
на
а строку (примерно 296)
на
3) Правим файл components/content/model.php (ищем строку 290)
Там два запроса к базе
Пишем вместо них
т.е. новый запрос (cat.tpl as tpl,) кроме старых полей цепляет также значение нового созданного поля tpl
4) В файле core/classes/page.class.php ищем строку 1100
Там есть функция, которая ищет в папке modules шаблона все tplки оформления модуля. С помощью модифицированой копии этой функции будем искать в папке components файлы, начинающиеся с com_content_read
После кода
добавим наш код
Вуаля :)
Все изменения проведены. В созданном ранее com_content_read_novosti.tpl уберем, например, вывод изображения в подробном выводе новости, а именно удалим строки
Идем в админку, в список разделов, открываем интересующий и в правой колонке видим
выбираем com_content_read_novosti.tpl
Идем на сайт в тот самый раздел, открываем новость для которой задано изображение и в подробно видим, что картинка не выводится. То есть статья оформляется нашим com_content_read_novosti.tpl Кроме вывода изображения можно в файле com_content_read_novosti.tpl поменять все, что заблагоросудится :)
Все, теперь разделы не будут безлико одинаковы .dance.
По аналогии можно подобное сделать для разделов универсального каталога
НЕ СТАВЬТЕ СРАЗУ НА ЖИВОЙ САЙТ, ПОЭКСПЕРИМЕНТИРУЙТЕ НА ЛОКАЛКЕ
Наверно должно быть в офсборке
UPD. Нельзя писать посты в блог на ночь глядя, пропустил одну правку...
в файле admin/applets/cats.php нужно вместо кода
написать
иначе категория не будет ни создаваться, ни обновляться. Звиняйте. Теперь точно будет робить
Сам вопрос задал: instantcms.ru/forum/thread4681.html
Сам и отвечу.
В общем суть проблемы ясна, иногда очень нужно, чтобы оформление статей в разделах отличалось. В моем случае, раздел видео, и не нужно чтобы изображение видео выводилось при подробном просмотре видео.
Первым делом делаем бэкап базы и сайта мало ли
Идем в базу данных в phpmyAdmin и выполняем запрос:
ALTER TABLE `cms_category` ADD `tpl` VARCHAR( 30 ) DEFAULT 'com_content_read.tpl' NOT NULL AFTER `is_public` ;
Править будем следующие файлы:
1) admin/applets/cats.php — тут добавим в админке поле для выбора шаблона
2) components/content/frontend.php — тут поправим формирование страницы статьи, а именно ее обработку в smarty
3) components/content/model.php — тут нужно поправить запрос к бд, чтобы данные из нашего поля tpl подтягивались
4) core/classes/page.class.php — тут нужно добавить функцию, которая будет искать в папке components наши шаблоны оформления статей, имеющие вид com_content_read......tpl
Копируем файл com_content_read.tpl из дефолтного шаблона в наш, в папку components ( если нет, то создать ее), создадим его копию и переименуем, например com_content_read_novosti.tpl С помощью этого шаблона в дальнейшем будем оформлять видео новости
Итак, правим файлы по шагам
1) Добавляем в admin/applets/cats.php после кода (примерно 474 строка)
<div style="margin-top:20px"><strong>Число колонок для вывода статей</strong></div> <div> <input name="maxcols" type="text" id="maxcols" style="width:99%" value="<?php echo @$mod['maxcols'];?>" /> </div>
<div style="margin-top:15px"> <strong>Шаблон раздела</strong> <span class="hinttext">— Файлы из папки <b>components/</b> вашего шаблона, названия которых начинаются на com_content_read</span> </div> <div> <?php $tpls = cmsPage::getModuleTemplates2(); ?> <select name="tpl" id="tpl" style="width:100%"> <?php foreach($tpls as $tpl){ $selected = ($mod['tpl']==$tpl || (!$mod['tpl'] && $tpl=='com_content_read.tpl' )) ? 'selected' : ''; echo '<option value="'.$tpl.'" '.$selected.'>'.$tpl.'</option>'; } ?> </select> </div>
$smarty = $inCore->initSmarty('components', 'com_content_read.tpl');
$smarty = $inCore->initSmarty('components', $article['tpl']);
$smarty->display('com_content_read.tpl');
$smarty->display($article['tpl']);
Там два запроса к базе
/* ==================================================================================================== */ /* ==================================================================================================== */ public function getArticle($article_id) { $sql = "SELECT con.*, DATE_FORMAT(con.pubdate, '%d-%m-%Y (%H:%i)') pubdate, DATE_FORMAT(con.pubdate, '%d-%m-%Y') shortdate, cat.title cat_title, cat.id cat_id, cat.NSLeft as leftkey, cat.NSRight as rightkey, cat.showtags as showtags, u.nickname as author, con.user_id as user_id, u.login as user_login FROM cms_content con, cms_category cat, cms_users u WHERE con.id = $article_id AND con.category_id = cat.id AND con.user_id = u.id AND con.published = 1 AND (con.is_end=0 OR (con.is_end=1 AND con.enddate >= '$today' AND con.pubdate <= '$today'))"; $result = $this->inDB->query($sql); if (!$this->inDB->num_rows($result)) { return false; } $article = $this->inDB->fetch_assoc($result); $article = cmsCore::callEvent('GET_ARTICLE', $article); return $article; } /* ==================================================================================================== */ /* ==================================================================================================== */ public function getArticleByLink($seolink) { $sql = "SELECT con.*, con.pubdate as pubdate, DATE_FORMAT(con.pubdate, '%d-%m-%Y') shortdate, cat.title cat_title, cat.id cat_id, cat.NSLeft as leftkey, cat.NSRight as rightkey, cat.showtags as showtags, u.nickname as author, con.user_id as user_id, u.login as user_login FROM cms_content con, cms_category cat, cms_users u WHERE con.seolink = '$seolink' AND con.category_id = cat.id AND con.user_id = u.id AND con.published = 1"; $result = $this->inDB->query($sql); if (!$this->inDB->num_rows($result)) { return false; } $article = $this->inDB->fetch_assoc($result); $article = cmsCore::callEvent('GET_ARTICLE', $article); return $article; }
/* ==================================================================================================== */ /* ==================================================================================================== */ public function getArticle($article_id) { $sql = "SELECT con.*, DATE_FORMAT(con.pubdate, '%d-%m-%Y (%H:%i)') pubdate, DATE_FORMAT(con.pubdate, '%d-%m-%Y') shortdate, cat.title cat_title, cat.id cat_id, cat.NSLeft as leftkey, cat.NSRight as rightkey, cat.showtags as showtags, cat.tpl as tpl, u.nickname as author, con.user_id as user_id, u.login as user_login FROM cms_content con, cms_category cat, cms_users u WHERE con.id = $article_id AND con.category_id = cat.id AND con.user_id = u.id AND con.published = 1 AND (con.is_end=0 OR (con.is_end=1 AND con.enddate >= '$today' AND con.pubdate <= '$today'))"; $result = $this->inDB->query($sql); if (!$this->inDB->num_rows($result)) { return false; } $article = $this->inDB->fetch_assoc($result); $article = cmsCore::callEvent('GET_ARTICLE', $article); return $article; } /* ==================================================================================================== */ /* ==================================================================================================== */ public function getArticleByLink($seolink) { $sql = "SELECT con.*, con.pubdate as pubdate, DATE_FORMAT(con.pubdate, '%d-%m-%Y') shortdate, cat.title cat_title, cat.id cat_id, cat.NSLeft as leftkey, cat.NSRight as rightkey, cat.showtags as showtags, cat.tpl as tpl, u.nickname as author, con.user_id as user_id, u.login as user_login FROM cms_content con, cms_category cat, cms_users u WHERE con.seolink = '$seolink' AND con.category_id = cat.id AND con.user_id = u.id AND con.published = 1"; $result = $this->inDB->query($sql); if (!$this->inDB->num_rows($result)) { return false; } $article = $this->inDB->fetch_assoc($result); $article = cmsCore::callEvent('GET_ARTICLE', $article); return $article; }
4) В файле core/classes/page.class.php ищем строку 1100
Там есть функция, которая ищет в папке modules шаблона все tplки оформления модуля. С помощью модифицированой копии этой функции будем искать в папке components файлы, начинающиеся с com_content_read
После кода
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public static function getModuleTemplates() { $tpl_dir = is_dir(TEMPLATE_DIR.'modules') ? TEMPLATE_DIR.'modules' : PATH.'/templates/_default_/modules'; if ( ($nextfile != '.') && ($nextfile != '..') && ($nextfile!='.svn') && ) { $templates[$nextfile] = $nextfile; } } return $templates; }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public static function getModuleTemplates2() { $tpl_dir = is_dir(TEMPLATE_DIR.'components') ? TEMPLATE_DIR.'components' : PATH.'/templates/_default_/components'; if ( ($nextfile != '.') && ($nextfile != '..') && ($nextfile!='.svn') && ) { $templates[$nextfile] = $nextfile; } } return $templates; }
Все изменения проведены. В созданном ранее com_content_read_novosti.tpl уберем, например, вывод изображения в подробном выводе новости, а именно удалим строки
{if $article_image} <div class="con_image" style="float:left;margin-top:10px;margin-right:20px;margin-bottom:20px"> <img src="/images/photos/medium/{$article_image}" alt="{$article_image}"/> </div> {/if}
выбираем com_content_read_novosti.tpl
Идем на сайт в тот самый раздел, открываем новость для которой задано изображение и в подробно видим, что картинка не выводится. То есть статья оформляется нашим com_content_read_novosti.tpl Кроме вывода изображения можно в файле com_content_read_novosti.tpl поменять все, что заблагоросудится :)
Все, теперь разделы не будут безлико одинаковы .dance.
По аналогии можно подобное сделать для разделов универсального каталога
НЕ СТАВЬТЕ СРАЗУ НА ЖИВОЙ САЙТ, ПОЭКСПЕРИМЕНТИРУЙТЕ НА ЛОКАЛКЕ
Наверно должно быть в офсборке
UPD. Нельзя писать посты в блог на ночь глядя, пропустил одну правку...
в файле admin/applets/cats.php нужно вместо кода
if ($category['id']){ $sql = "UPDATE cms_category SET parent_id={$category['parent_id']}, title='{$category['title']}', description='{$category['description']}', published={$category['published']}, showdate={$category['showdate']}, showcomm={$category['showcomm']}, orderby='{$category['orderby']}', orderto='{$category['orderto']}', modgrp_id='{$category['modgrp_id']}', maxcols='{$category['maxcols']}', showtags={$category['showtags']}, showrss={$category['showrss']}, showdesc={$category['showdesc']}, is_public={$category['is_public']}, photoalbum='$photoalbum', seolink='$seolink', url='{$category['url']}' WHERE id = {$category['id']} LIMIT 1"; dbQuery($sql) ; }
if ($category['id']){ $sql = "UPDATE cms_category SET parent_id={$category['parent_id']}, title='{$category['title']}', description='{$category['description']}', published={$category['published']}, showdate={$category['showdate']}, showcomm={$category['showcomm']}, orderby='{$category['orderby']}', orderto='{$category['orderto']}', modgrp_id='{$category['modgrp_id']}', maxcols='{$category['maxcols']}', showtags={$category['showtags']}, showrss={$category['showrss']}, showdesc={$category['showdesc']}, is_public={$category['is_public']}, tpl='{$category['tpl']}', photoalbum='$photoalbum', seolink='$seolink', url='{$category['url']}' WHERE id = {$category['id']} LIMIT 1"; dbQuery($sql) ; }
Реклама #
14 лет назад #
Zau4man 14 лет назад #
и также для УК.
А то иногда УК исользуется и как справка, и как интернет-магазин, и плохо, что они оформляются одинаково.
lezginka.ru 14 лет назад #
Zau4man 14 лет назад #
поэтому лучше сразу ручками.
14 лет назад #
Я его никогда не делал, а там много полей, флажков, кнопок и т.д.
С кодом же все ясно
14 лет назад #
bondar 13 лет назад #
bondar 13 лет назад #
bondar 13 лет назад #
NIKITA 10 лет назад #
NIKITA 10 лет назад #