Автоматическая смена динамичных ссылок на ЧПУ, Часть I

 

Доброго времени суток дорогой читатель! Добро пожаловать на мой блог! Сегодня мы с Вами продолжим реализовывать ЧПУ на php, пополняя тем самым цикл "Создать блог с нуля". В сегодняшней заметки мы с Вами поработаем над кнопкой "читать дальше", нам необходимо сделать так, что бы ссылка у кнопок, на главной странице и на страницах категории, менялась автоматически, в зависимости от переменной chpu. Если кто не помнит, эта переменная отвечает за включение и выключение режима ЧПУ на нашем блоге

 

 

Добиться такого результата не сложно, достаточно провести значение переменной chpu в каждый редактируемый модуль. В зависимости от значения переменной генерировать ссылки нужного нам типа, и выводить эти ссылки в шаблоне. В общем, сегодня нам предстоит отредактировать:

  • Шаблон news.html
  • Главный файл нашего движка - index.php
  • Два модуля - cat.php и news.php

На этом мы закончим =)

 

Для новоприбывших

 

Заметка для тех кто на блоге в первые. Этот пост, как и большинство постов на моем блоге, является частью глобального цикла "Создать блог с нуля", поэтому информация в данной статье может Вам показаться совершенно бессмысленной, ибо мы будем рассматривать файлы которых у Вас нет.

Цикл рассчитан на людей которые хотят научится программировать на языке php без лишней теории, так сказать на практике, поэтому этот цикл можно по праву считать уроками php.

Если Вы заинтересованны моим циклом, то добро пожаловать! Переходите по ссылки, что я дал выше, и приступайте к изучению!

Если Вы планируете задержаться на моем блоге, то обязательно подпишитесь на RSS ленту блога через ридер, или же по почте, так Вы не пропустите новые заметки в цикле "Создать блог с нуля"

 

Шаблон news.html

 

Если помните, кнопка "Читать дальше" генерируется обычной подстановкой id к переменной blog. Вот выдержка из шаблона

    <p align="right"><a href="?blog=[_id]">Читать дальше</a></p>

Теперь, когда нам необходимо, манипулируя лишь одной переменной (chpu), заставить блог автоматически менять ссылки с динамики на ЧПУ, одной постановкой id ([_id]) мы не обойдемся! Придется заменить код-слово, и подставлять не просто id, а целую ссылку, поэтому переделываем шаблон вот так:

                    <!--МИНИ ТЕКСТ-->
<div class="title_txt">[_title]</div>
<div class="txt">
[_text]
<p align="right"><a href="[_gomore]">Читать дальше</a></p>
</div>
<div class="txt">Автор: [_author] | [_date_b]</div>
<div class="end"></div>
<!--МИНИ ТЕКСТ-->

У кнопки "Читать дальше" теперь новое код-слово - [_gomore]. Вместо него (код-слова) мы будем подставлять полную ссылку! Какую именно? Это будет зависеть от переменной chpu. Если переменная chpu будет равна нулю (то есть ЧПУ режим отключен), то ссылка будет вот такой (пример)

http://имя сайта.ru/index.php?blog=1

Если же переменная chpu будет равна единице (то есть режим ЧПУ включен), то ссылка будет вот такого вида (пример)

http://имя сайта.ru/post/dobro-pozhalovat.html

Думаю тут все ясно =)

 

Редактируем главный файл - index.php

 

Для того чтобы оперировать с переменной отвечающей за режим работы блога (включен или отключен ЧПУ) ее необходимо объявить в функциях, то бишь в модулях! Так как сегодня мы рассматриваем лишь главную страницу и страницы категории, то и править будет функции отвечающие за эти страницы!

Открываем файл index.php, отыскиваем вызов функции index_page() и прописываем в нее переменную chpu, тем самым подключение модуля анонсов будет выглядеть вот так:

//МОДУЛЬ МИНИ НОВОСТЕЙ
if(!isset($blog) AND !isset($contact) AND !isset($cat))//Новое условие
{
include("moduls/news.php");
include("moduls/lockpost.php");//подключаем функцию блокировки поста
$txt = lockpost().index_page($chpu);//Выводим результат функции в переменную, которая отобразится на экране пользователя
}
//МОДУЛЬ МИНИ НОВОСТЕЙ

То же самое проделываем с подключением модуля категории

//МОДУЛЬ КАТЕГОРИЙ
if(isset($cat))
{
include("moduls/cat.php");
$txt = index_cat($cat,$chpu);
}
//МОДУЛЬ КАТЕГОРИЙ

Теперь переменная chpu будет доступна в теле редактируемых нами функций.

 

Редактируем модуль мини новостей - news.php

 

Я дам Вам полный код функции index_page()

function index_page($chpu)
{
$result_index = mysql_query("SELECT * FROM blog WHERE viewindex='1' ORDER BY id DESC LIMIT 10");//Выводим из базы данных последние 10 записей
$myrow_index = mysql_fetch_array($result_index);
if($myrow_index != "")//Проверяем есть ли в базе данных записи
{//Если есть...
$sm_read = file("templates/news.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
do//Цикл do while
{
$edd_tamp = $sm_read;//Так как на придется править шаблон,
//то лучше его сохранить в отдельную переменную, иначе нам придется
//пользоваться функцией file() чаще чем 1 раз, а это нагрузка на сервер
$text = explode("<p>[end]</p>",$myrow_index[text]);//идентификатор в тексте показывающий,
//что после него следует вывести кнопку "читать дальше"

//формируем ссылку на пост
if($chpu == 0)$link = "index.php?blog=".$myrow_index[id];
else $link = "post/".$myrow_index[nameurl];

//Замены идентификаторов на переменные из базы данных
$edd_tamp = str_replace("[_text]",$text[0],$edd_tamp);//Текст
$edd_tamp = str_replace("[_title]",$myrow_index[title],$edd_tamp);//Название статьи
$edd_tamp = str_replace("[_author]",$myrow_index[author],$edd_tamp);//Автор статьи
$edd_tamp = str_replace("[_date_b]",$myrow_index[date_b],$edd_tamp);//Дата размещения
$edd_tamp = str_replace("[_gomore]",$link,$edd_tamp);//линк статьи

$news .= $edd_tamp;// Склеиваем весь с генерированный код в одну переменную
}
while($myrow_index = mysql_fetch_array($result_index));
}
else $news = "<p align='center'>Нет записей в базе данных</p>";//Если записей нет, то вывести это сообщение
return $news;//Выводим с генерированный html код
}
  • Самое первое что я тут исправил, это параметр функции
function index_page($chpu)
{
...
}

Если быть конкретнее, то я добавил в параметры переменную chpu.

  • Далее я добавил скрипт формирование ссылки
//формируем ссылку на пост
if($chpu == 0)$link = "index.php?blog=".$myrow_index[id];
else $link = "post/".$myrow_index[nameurl];

В зависимости от значения переменной chpu, переменная link примет значение динамичной ссылки или же ЧПУ.

  • На по следок я заменил строчку замены код-слова [_id] на строчку замены код-слова [_gomore]
$edd_tamp = str_replace("[_gomore]",$link,$edd_tamp);//линк статьи

На этом редактирование заканчивается, не сложно, правда? =)

 

Редактируем модуль категорий - cat.php

 

В данном модуле изменение те же самые, я дам Вам полный код функции, он за комментирован и не нуждается в объяснениях =)

function index_cat($cat,$chpu)
{
$result_index = mysql_query("SELECT * FROM blog WHERE cat='$cat' AND viewindex='1' ORDER BY id DESC");//Выводим из базы данных все записи где колонка cat равна переменной $cat
$myrow_index = mysql_fetch_array($result_index);
if($myrow_index != "")//Проверяем есть ли в базе данных записи
{//Если есть...
$sm_read = file("templates/news.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
do//Цикл do while
{
$edd_tamp = $sm_read;//Так как на придется править шаблон,
//то лучше его сохранить в отдельную переменную, иначе нам придется
//пользоваться функцией file() чаще чем 1 раз, а это нагрузка на сервер
$text = explode("<p>[end]</p>",$myrow_index[text]);//идентификатор в тексте показывающий,
//что после него следует вывести кнопку "читать дальше"

//формируем ссылку на пост
if($chpu == 0)$link = "index.php?blog=".$myrow_index[id];
else $link = "post/".$myrow_index[nameurl];

//Замены идентификаторов на переменные из базы данных
$edd_tamp = str_replace("[_text]",$text[0],$edd_tamp);//Текст
$edd_tamp = str_replace("[_title]",$myrow_index[title],$edd_tamp);//Название статьи
$edd_tamp = str_replace("[_author]",$myrow_index[author],$edd_tamp);//Автор статьи
$edd_tamp = str_replace("[_date_b]",$myrow_index[date_b],$edd_tamp);//Дата размещения
$edd_tamp = str_replace("[_gomore]",$link,$edd_tamp);//линк статьи

$result .= $edd_tamp;// Склеиваем весь с генерированный код в одну переменную
}
while($myrow_index = mysql_fetch_array($result_index));
}
else $result = "<p align='center'>Нет записей в базе данных</p>";//Если записей нет, то вывести это сообщение
return $result;//Выводим с генерированный html код
}

 

Заключение

 

Теперь на главной странице и на страницах категории, ссылка у кнопки "Читать дальше" будет генерировать в зависимости от значения переменной chpu, тем самым у нас появляется возможность в один клик сменить режим блога

 

ссылка у кнопки читать дальше

 

Совсем скоро мы проделаем туже операцию и с модулем меню, поэтому подпишитесь на RSS ленту блога через ридер, или же по почте, так Вы точно ничего не пропустите =)

Если у Вас есть какие либо вопросы, то пользуйтесь формой ниже

Всего Вам наилучшего! У меня все!

Исходник
 

Возможно Вам будут интересны следующие заметки

Комментарии (4)

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
Роман, 07 Августа 2012 г. 17:06 пишет:
Гость
Сделал все по описанию.. перепроверил все по три раза... ссылка все равно криво формируется.
Формируется вид
http://test.ru/?blog=post/statiya.html т.е. перед ЧПУ вставляется еще "?blog="
Роман, 07 Августа 2012 г. 17:13 пишет:
Гость
Затупил.... в шаблоне не убрал просто "?blog=" ! ))))
ислям, 22 Апреля 2013 г. 15:39 пишет:
Гость
lockpost.php в какой статье про этот файлик описанно?
Алексей, 22 Апреля 2013 г. 18:45 пишет:
Автор
Заметка находится вот по этой ссылке
http://rio-shaman.ru/razrabotka-cms/uluchshenija/privetstvie-na-glavnoj/
Ответ для пользователя: ислям