Версия: InstantCMS v1.7
И так пилим дальше 😊
Заметно, что после прочтения статьи некуда дальше по сайту идти и те кто посещают наши сайты просто закрывают страницу. Но нам нужно удержать нашего посетителя на сайте, провести его дальше. Почему то для статей нет кнопок следующая и предыдущая, вот их то мы и сделаем.
Что нам понадобится так это немного дописать компонент статей. Открываем файл /components/content/model.php и прописываем новую функцию, которая нам будет выбирать рядом идущие статьи, назовем функцию getArticleWithButton и определим её скажем после функции getArticle:
В этом файле мы как раз получаем статью следующую и предыдущую в зависимости от того поля мы сортируем.
Теперь будем пользовать эту функцию в файле, как вы уже наверное догадались /components/content/frontend.php. Открываем его, ищем кусок кода, где начало взятие из базы текущей статьи (у меня это 164 по 176 строку):
и сразу после этого кода добавляем:
этот код, берет категорию статей.
Ну и теперь самый важный код (вернее он весь тут самый важный, но этот как раз получает наши искомые статьи).
И так пролистываем ниже примерно до 272 строки и ищем код:
и сразу после него добавляем код:
вот таким образом мы получили данные наших статей и в зависимости от метода сортировки они и будут показываться.
Теперь собственно осталось их вывести после текущей статьи, что бы можно было перейти на следующую или предыдущую. Открываем в шаблонах файл отвечающий за вывод текущей статьи /templates/мой_шаблон/components/com_content_read.tpl
Перемещаемся по файлу в самый конец и оформляем вывод следующей и предыдущей статьи. Я использовал заголовок статьи и картинку к статье для перехода, можно конечно и вставить описание, но это уже дело каждого, кто что хочет. Может кому то нужно будет просто сделать стрелочки влево и право. Здесь полет ваших фантазий.
Для тех кому нужны только стрелочки можно вставить в шаблон следующий код, вместо того который выше:
Переменные, которые используются в шаблоне:
{$article_button.prev} — массив с предыдущей статьёй
{$article_button.next} — массив со следующей статьёй
{$article_button.next.title} {$article_button.next.title} — заголовок статьи
{$article_button.next.image} {$article_button.next.image} — картинка превьюшка к статье
{$article_button.next.seolink} {$article_button.next.seolink} — недоссылка к статье
{$article_button.next.description} {$article_button.next.description} — описание статьи
Думаю этих переменных достаточно что бы организовать перемещение по текущему разделу статей.
Пример можете посмотреть на сайте: oxuxo.ru/polezno/dom/komnatnye-rasteniya-i-cvety-dlya-doma.html
Пользуйтесь на благо посещаемости ваших проектов!
И так пилим дальше 😊
Заметно, что после прочтения статьи некуда дальше по сайту идти и те кто посещают наши сайты просто закрывают страницу. Но нам нужно удержать нашего посетителя на сайте, провести его дальше. Почему то для статей нет кнопок следующая и предыдущая, вот их то мы и сделаем.
Что нам понадобится так это немного дописать компонент статей. Открываем файл /components/content/model.php и прописываем новую функцию, которая нам будет выбирать рядом идущие статьи, назовем функцию getArticleWithButton и определим её скажем после функции getArticle:
public function getArticleWithButton($article_id, $cat_id, $orderby = 'id', $order = 0) { $sql = "SELECT * FROM cms_content WHERE category_id = '$cat_id' AND id <> $article_id "; switch ($orderby) { case 'pubdate': $sql .= " AND ($orderby BETWEEN '1900-01-01 00:00:00' AND '$order') ORDER BY $orderby DESC LIMIT 1"; break; case 'ordering': $sql .= " AND id > $article_id ORDER BY $orderby DESC, id ASC LIMIT 1"; break; default: $sql .= " AND id > $article_id ORDER BY id ASC LIMIT 1"; break; } $result = $this->inDB->query($sql); if ($this->inDB->num_rows($result)) $article['prev'] = $this->inDB->fetch_assoc($result); $sql = "SELECT * FROM cms_content WHERE category_id = '$cat_id' AND id <> $article_id "; switch ($orderby) { case 'pubdate': $sql .= " AND ($orderby BETWEEN '$order' AND '2100-01-01 00:00:00') ORDER BY $orderby ASC LIMIT 1"; break; case 'ordering': $sql .= " AND id < $article_id ORDER BY $orderby DESC, id DESC LIMIT 1"; break; default: $sql .= " AND id < $article_id ORDER BY id DESC LIMIT 1"; break; } $result = $this->inDB->query($sql); if ($this->inDB->num_rows($result)) $article['next'] = $this->inDB->fetch_assoc($result); return $article; }
Теперь будем пользовать эту функцию в файле, как вы уже наверное догадались /components/content/frontend.php. Открываем его, ищем кусок кода, где начало взятие из базы текущей статьи (у меня это 164 по 176 строку):
if ($do=='read'){ $inCore->includeConfig(); $seolink = $inCore->request('seolink', 'str', ''); if ($seolink) { $article = $model->getArticleByLink($seolink); } elseif($id) { $article = $model->getArticle($id); }
$cat = $model->getCategory($article['category_id']);
Ну и теперь самый важный код (вернее он весь тут самый важный, но этот как раз получает наши искомые статьи).
И так пролистываем ниже примерно до 272 строки и ищем код:
if($cfg['rating'] && $article['canrate']){ $inCore->loadLib('karma'); $karma = cmsKarma('content', $article['id']); $smarty->assign('karma_points', cmsKarmaFormatSmall($karma['points'])); $smarty->assign('karma_votes', $karma['votes']); $btns = cmsKarmaButtonsText('content', $article['id'], $karma['points'], $is_author); if ($btns) { $smarty->assign('karma_buttons', $btns); } }
$article_button = $model->getArticleWithButton($article['id'], $article['cat_id'], $cat['orderby'], $article[$cat['orderby']]); if ($article_button['prev']) $article_button['prev']['image'] = (file_exists(PATH.'/images/photos/medium/article'.$article_button['prev']['id'].'.jpg') ? 'article'.$article_button['prev']['id'].'.jpg' : ''); if ($article_button['next']) $article_button['next']['image'] = (file_exists(PATH.'/images/photos/medium/article'.$article_button['next']['id'].'.jpg') ? 'article'.$article_button['next']['id'].'.jpg' : ''); $smarty->assign('article_button', $article_button);
Теперь собственно осталось их вывести после текущей статьи, что бы можно было перейти на следующую или предыдущую. Открываем в шаблонах файл отвечающий за вывод текущей статьи /templates/мой_шаблон/components/com_content_read.tpl
Перемещаемся по файлу в самый конец и оформляем вывод следующей и предыдущей статьи. Я использовал заголовок статьи и картинку к статье для перехода, можно конечно и вставить описание, но это уже дело каждого, кто что хочет. Может кому то нужно будет просто сделать стрелочки влево и право. Здесь полет ваших фантазий.
<table width="100%" class="article_button"> <tr> <th>{if $article_button.prev}Предыдущая статья в разделе <a href="/{$pcat.seolink}">{$article.cat_title}</a>{else} {/if}</th> <th>{if $article_button.next}Следующая статья в разделе <a href="/{$pcat.seolink}">{$article.cat_title}</a>{else} {/if}</th> </tr> <tr> <div class="title"><a href="/{$article_button.prev.seolink}.html">{$article_button.prev.title}</a></div> {if $article_button.prev.image}<div class="text"><a href="/{$article_button.prev.seolink}.html"><img src="/images/photos/small/{$article_button.prev.image}" alt="{$article_button.prev.title}" title="{$article_button.prev.title}" /></a></div>{/if} {else} {/if}</td> <div class="title"><a href="/{$article_button.next.seolink}.html">{$article_button.next.title}</a></div> {if $article_button.next.image}<div class="text"><a href="/{$article_button.next.seolink}.html"><img src="/images/photos/small/{$article_button.next.image}" alt="{$article_button.next.title}" title="{$article_button.next.title}" /></a></div>{/if} {else} {/if}</td> </tr> </table> {/if}
<table width="100%" class="article_button"> <tr> <td width="50%" class="prev">{if $article_button.prev}← <a href="/{$article_button.prev.seolink}.html">{$article_button.prev.title}</a> {else} {/if}</td> {else} {/if}</td> </tr> </table>
Переменные, которые используются в шаблоне:
{$article_button.prev} — массив с предыдущей статьёй
{$article_button.next} — массив со следующей статьёй
{$article_button.next.title} {$article_button.next.title} — заголовок статьи
{$article_button.next.image} {$article_button.next.image} — картинка превьюшка к статье
{$article_button.next.seolink} {$article_button.next.seolink} — недоссылка к статье
{$article_button.next.description} {$article_button.next.description} — описание статьи
Думаю этих переменных достаточно что бы организовать перемещение по текущему разделу статей.
Пример можете посмотреть на сайте: oxuxo.ru/polezno/dom/komnatnye-rasteniya-i-cvety-dlya-doma.html
Пользуйтесь на благо посещаемости ваших проектов!
Реклама #
Hmelex 13 лет назад #
+1
Hmelex 13 лет назад #
seego 13 лет назад #
13 лет назад #
nikolas 13 лет назад #
поддерживаю
Edik_Salonikski 13 лет назад #
imprint 13 лет назад #
seego 13 лет назад #
.article_button { font-size: 80%; }
.article_button td {padding: 5px 10px; vertical-align: top;}
.article_button .title {font-size: 140%; font-style: italic; font-weight: bold; padding-top: 7px;}
imprint 13 лет назад #
Zau4man 13 лет назад #
Yuri 13 лет назад #
braincord 13 лет назад #
seego 13 лет назад #
mrDON 13 лет назад #
Умные Интернет Разработки 13 лет назад #
Возможно такое?
seego 13 лет назад #
Умные Интернет Разработки 13 лет назад #
seego 13 лет назад #
Умные Интернет Разработки 13 лет назад #
SP 13 лет назад #
pasplus 13 лет назад #
bondar 13 лет назад #
причем если такой баг попадает то идет обычно таких две страницы, в итоге получается замкнутый круг, и он перекидывает между двумя статьями
Кто знает с чем это связано**???????
seego 13 лет назад #
bondar 13 лет назад #
seego 13 лет назад #
bondar 13 лет назад #
seego 13 лет назад #
bondar 13 лет назад #
Kotanol 12 лет назад #
toropa 11 лет назад #
Юрий 10 лет назад #
Викторыч 10 лет назад #
Pasha 10 лет назад #