Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как сделать цепочку шаблонов?
 
 автор: Владимир55   (15.11.2006 в 10:08)   письмо автору
 
 

Разместил на своем сайте несколько книг, но народ сетует, что файлы получились слишком большие, так что при коммутируемом доступе открываются долго. Я и сам это понимаю, и решил разбить каждую книгу на главы (разделы), разместив каждый раздел на отдельном файле. Человек прочитал эту главу, а внизу ссылочка – «Читать дальше». И если это был файл 01.htm, то переход на файл 02.htm и т.д. Ну, а еще в титлах вписываю номер главы, и вверху страницы для удобства. И верху ссылку на главную страницу для возврата. Получился вот такой шаблончик:

<html>

<head>
<meta http-equiv="Content-Language" content="ru">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Книга. Часть [m]</title>
</head>

<body>
<p><a href="http://www.site.ru">На главную страницу сайта</a></p>
<p>Часть <span lang="en-us">[m]</span></p>
<p align="left">Текст книги</p>
<p align="left"><a href="[m+1].htm">Читать далее</a></p>
</body>

</html>

Здесь только одна переменная, которую я обозначил [m]

И нужно, что бы каким-то образом формировалась цепочка таких шаблончиков, причем [m] линейно увеличивалось от 1 до некоей заданной мною величины.

До сего дня изготавливал эти шаблоны вручную, но цепочки по 100 и 140 шаблонов делать очень трудоемко, да и ошибок много!

А нельзя ли как то сделать это автоматически? Ввел название книги в титлы и длину цепочки (сколько страничек сделать), пуск – и цепочка из ста шаблонов готова! Как бы это осуществить?

   
 
 автор: elenaki   (15.11.2006 в 10:26)   письмо автору
 
   для: Владимир55   (15.11.2006 в 10:08)
 

шаблон должен быть ОДИН, а содержимое - меняться в зависимости от страницы. не с той
стороны начинаете...

   
 
 автор: Владимир55   (15.11.2006 в 10:41)   письмо автору
 
   для: elenaki   (15.11.2006 в 10:26)
 

Согласен, можно и так. Шаблон один, я его заполняю текстом, а потом он сохраняется в виде странички, куда автоматически дописывается переменный параметр m, увеличенный на единицу. То есть при первой записи создается файл 01.htm с внутренней ссылкой на 02.htm, затем 02.htm с внутренней ссылкой на 03.htm, и т.д.

Вы это имели в виду?

   
 
 автор: elenaki   (15.11.2006 в 10:46)   письмо автору
 
   для: Владимир55   (15.11.2006 в 10:41)
 

приклрепляю скрипт фотоальбома, где есть листание вперед-назад и установка общего
числа фоток и числа фоток на странице. PHP нет. только HTML и java-Script. всего 3 файла и
сам скрипт. фотки в отдельной папке. переделать с фоток на тексты легче легкого.

   
 
 автор: Владимир55   (15.11.2006 в 11:00)   письмо автору
 
   для: elenaki   (15.11.2006 в 10:46)
 

Мысль очень интересная!

Хотя я не все понял.

В файле script устанавливается количество картинок. Так.

Ну, а как применить все это для моих целей?

   
 
 автор: elenaki   (15.11.2006 в 11:48)   письмо автору
 
   для: Владимир55   (15.11.2006 в 11:00)
 

а с PHP поработать никакой возможности нет? потому что делать в наше время CMS на JS
кажется тратой времени и сил. на каком этапе вы сейчас? тексты набраны и сверстаны в
html? нет только механизма управления готовыми текстами/страницами? или надо еще и
админский модуль делать для создания и сохранения страниц? вручную сегодня никто
электронные книги не делает.

   
 
 автор: Владимир55   (15.11.2006 в 11:55)   письмо автору
 
   для: elenaki   (15.11.2006 в 11:48)
 

Книга в виде одного .htm файла. Тематическое разбиение дало цепочку из 143 файлов. Вот я третий день и делаю под нее цепочку из 143 шаблонов. Чувствую, что это допотопный подход.

Доступ к рнр у меня есть. Но как это использовать?

   
 
 автор: Loki   (15.11.2006 в 12:09)   письмо автору
 
   для: Владимир55   (15.11.2006 в 11:55)
 

Самый тупой вариант
<?
$len
=2000//символов на странице
$book="index.htm"//файл с книгой
$page=intval($_GET['page']); //номер текущей страницы получаем из url
$text=file_get_contents($book); //считываем файл целиком
$pages=str_split ($text$len); //разбиваем книгу на страницы
echo $pages[$page]; //выводим текущую страницу
//а тут у нас навигация
if ($page) echo "<a href=".$_SERVER['PHP_SELF']."?page=".$page-1.">назад</a>"//если страница не первая, то выводим ссылку на предыдущую
if ($page!=count($pages)-1) echo "<a href=".$_SERVER['PHP_SELF']."?page=".$page+1.">вперед</a>"//если страница не последняя, то выводим ссылку на следующую.


Типа должно работать...

   
 
 автор: Владимир55   (15.11.2006 в 12:21)   письмо автору
 
   для: Loki   (15.11.2006 в 12:09)
 

Если я правильно понял, то этот рнр-код надо добавить в код моего шаблона, приведенный в начале темы. Верно?

Я так и сделал.
При запуске такого комбинированного шаблона вверху странички появляется сообщение:

назад"; if ($page!=count($pages)-1) echo "

Что-то не так?

   
 
 автор: Loki   (15.11.2006 в 12:24)   письмо автору
 
   для: Владимир55   (15.11.2006 в 12:21)
 

проверьте еще раз. В первоначальном варианте были опечатки

   
 
 автор: Владимир55   (15.11.2006 в 12:40)   письмо автору
 
   для: Loki   (15.11.2006 в 12:24)
 

Переделал заново.

Общий код страницы стал таким:

<?
$len=2000; //символов на странице
$book="index.htm"; //файл с книгой
$page=intval($_GET['page']); //номер текущей страницы получаем из url
$text=file_get_contents($book); //считываем файл целиком
$pages=str_split ($text, $len); //разбиваем книгу на страницы
echo $pages[$page]; //выводим текущую страницу
//а тут у нас навигация
if ($page) echo "<a href=".$_SERVER['PHP_SELF']."?page=".$page-1.">назад</a>"; //если страница не первая, то выводим ссылку на предыдущую
if ($page!=count($pages)-1) echo "<a href=".$_SERVER['PHP_SELF']."?page=".$page+1.">вперед</a>"; //если страница не последняя, то выводим ссылку на следующую.

<html>
<head>
<meta http-equiv="Content-Language" content="ru">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Книга. Часть [m]</title>
</head>
<body>
<p><a href="http://www.site.ru">На главную страницу сайта</a></p>
<p>Часть <span lang="en-us">[m]</span></p>
<p align="left">Текст книги</p>
<p align="left"><a href="[m+1].htm">Читать далее</a></p>
</body>
</html>

При запуске страницы выводится сообщение:

назад"; //если страница не первая, то выводим ссылку на предыдущую if ($page!=count($pages)-1) echo "вперед"; //если страница не последняя, то выводим ссылку на следующую.

Слово "вперед" является ссылкой, а слово "назад" ссылкой не является.

=======================
1. Спасибо за то, что ввели комментарий!
2. Ваша идея превосходна!
3. Я не нашел функции сохранения созданной страницы. Где она?
4. Мне кажется, забыт значок ?> Добавил его - нет изменений. Убрал его.

   
 
 автор: Loki   (15.11.2006 в 13:02)   письмо автору
 
   для: Владимир55   (15.11.2006 в 12:40)
 


<?
$len
=200//символов на странице
$book="book.txt"//файл с книгой (сюда надо вписать название файла с книгой!!!!)
$page=intval($_GET['page']); //номер текущей страницы получаем из url
$text=file_get_contents($book); //считываем файл целиком
$pages=str_split ($text$len); //разбиваем книгу на страницы
?>
<html>
<head>
<meta http-equiv="Content-Language" content="ru">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Книга. Часть <?=$page+1 ?></title>
</head>
<body>
<p><a href="http://www.site.ru">На главную страницу сайта</a></p>
<p>Часть <span lang="en-us"><?=$page+1 ?></span></p>
<p align="left">
<?
echo $pages[$page]; //выводим текущую страницу
?>
</p>
<p align="left">
<?
//а тут у нас навигация
if ($page) echo "<a href=\"".$_SERVER['PHP_SELF']."?page=".($page-1)."\">назад</a>"//если страница не первая, то выводим ссылку на предыдущую
if ($page!=count($pages)-1) echo "<a href=\"".$_SERVER['PHP_SELF']."?page=".($page+1)."\"> вперед</a>"//если страница не последняя, то выводим ссылку на cледующую.
?>
</p>
</body>
</html>


уже проверил и уже даже работает...

   
 
 автор: Владимир55   (15.11.2006 в 13:23)   письмо автору
 
   для: Loki   (15.11.2006 в 13:02)
 

Ну а почему же у меня-то не работает???

Код перенес один в один - просто создал новую страничку с именем 1.htm
Имя книги так и оставил: book.txt

Что получилось:
Имя страницы после запуска - Книга. Часть <?=$page+1 ?> Прямо так и пишет вверху страницы на синем поле.

Содержание книги не выводит. А пишет только это:
=================
На главную страницу сайта

Часть

назад"; //если страница не первая, то выводим ссылку на предыдущую if ($page!=count($pages)-1) echo " вперед"; //если страница не последняя, то выводим ссылку на cледующую. ?>
=================

При этом слово "вперед" как ссылка (а за ней Not Found), а слово "назад" просто как слово!

Может код каким-то диковинным образом искажается при его переносе со страницы Форума в редактор?

   
 
 автор: Loki   (15.11.2006 в 13:13)   письмо автору
 
   для: Владимир55   (15.11.2006 в 12:40)
 

>3. Я не нашел функции сохранения созданной страницы. Где она?
добро пожаловать в мир динамических страниц:)

   
 
 автор: Trianon   (15.11.2006 в 13:18)   письмо автору
 
   для: Loki   (15.11.2006 в 13:13)
 

а закешировать? :)

   
 
 автор: Loki   (15.11.2006 в 13:23)   письмо автору
 
   для: Trianon   (15.11.2006 в 13:18)
 

это в планах будущей CMS, начатой в предыдущем посте:)

   
 
 автор: Владимир55   (15.11.2006 в 13:26)   письмо автору
 
   для: Loki   (15.11.2006 в 13:23)
 

Может у меня в настройках поискать причину? Может код доступа к файлам не тот?

Можете ли Вы приложить созданный Вами файл и книгу, которые точно работают у Вас?

   
 
 автор: Loki   (15.11.2006 в 13:52)   письмо автору
 
   для: Владимир55   (15.11.2006 в 13:26)
 

Файл берите из поста выше, а книгу можете взять такую
book.txt
Smarty templates
Рано или поздно начинает как-то нервировать, когда при смене дизайна тебя отрывают от других проектов, потому что чтоб сменить дизайн, надо лезть внуть PHP-страниц и что-то там менять. А дизайнер этого делать и подавно не собирается (а может просто не умеет).


Собственно, для меня это и стало толчком в сторону концепции "разделения данных и представления".

В самом простом случае мы можем использовать HTML-шаблоны. Что это такое? Средство, позволяющее вынести из РНР весь HTML в отдельные файлы. Но данные туда вставлять все-равно надо, скажите вы. Да, надо, и для этого служит свой простой синтаксис, и никакого РНР-кода вперемежку с HTML!

Такова идея движка шаблонов Smarty. Я бы сказал, что это очень удобная штука, если применять ее с умом.

Итак, в первую очередь нам понадобится сам шаблонизатор. Берем и разваливаем его в какую-то папку в нашем www. После этого топаем сюда и читаем ускоренный курс обучения.

Как правило, все должно заработать. Если же все так просто с первого раза не запустилось, то давайте напишем обертку для класса Smarty.

Для начала, немного теории. Смарти при парсинге шаблона генерирует его PHP-код. Для увеличения быстродействия он его сохраняет в своем кеше и в следующий раз отдает его оттуда уже без повторной генерации (это папка template_c, у которой должны быть права на запись для апача).

   
 
 автор: Владимир55   (15.11.2006 в 14:14)   письмо автору
 
   для: Loki   (15.11.2006 в 13:52)
 

Loki!
Дело в том, что этот скрипт (цепочка шаблонов) у меня не работает! Я перепробовал и перепроверил все, что только мог, но он не работает. Полную диагностику я написал на Форуме выше. Единственное, что мне осталось - это попросить Вас прислать Ваш файл и проверить его у себя. Иначе вся проделанная Вами работа для меня бесполезна...

   
 
 автор: Владимир55   (15.11.2006 в 21:24)   письмо автору
 
   для: Владимир55   (15.11.2006 в 10:08)
 

Созданный Loky скрипт показа книг прост и очень удобен. Я не исключаю возможности, что и кто-то другой захочет его использовать. И поэтому привожу окончательную редакцию скрипта, который Loky в последний момент немного поправил.

<?
$len=2000; //символов на странице
$book="book.txt"; //файл с книгой
$page=intval($_GET['page']); //номер текущей страницы получаем из url
$text=file_get_contents($book); //считываем файл целиком
$pages=explode("----##----", chunk_split($text, $len, "----##----")); //разбиваем книгу на страницы
?>
<html>
<head>
<meta http-equiv="Content-Language" content="ru">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Книга. Часть <?=$page+1 ?></title>
</head>
<body>
<p><a href="http://www.site.ru">На главную страницу сайта</a></p>
<p>Часть <span lang="en-us"><?=$page+1 ?></span></p>
<p align="left">
<?
echo $pages[$page]; //выводим текущую страницу
?>
</p>
<p align="left">
<?
//а тут у нас навигация
if ($page) echo "<a href=\"".$_SERVER['PHP_SELF']."?page=".($page-1)."\">назад</a>"; //если страница не первая, то выводим ссылку на предыдущую
if ($page!=count($pages)-1) echo "<a href=\"".$_SERVER['PHP_SELF']."?page=".($page+1)."\"> вперед</a>"; //если страница не последняя, то выводим ссылку на cледующую.
?>
</p>
</body>
</html>

   
 
 автор: Loki   (15.11.2006 в 22:45)   письмо автору
 
   для: Владимир55   (15.11.2006 в 21:24)
 


$pages=explode("----##----", chunk_split($text, $len, "----##----")); //разбиваем книгу на страницы

Эта строчка для версий php < 5.
Для пятерки работает скрипт написанный выше.

   
 
 автор: Владимир55   (16.11.2006 в 11:39)   письмо автору
 
   для: Loki   (15.11.2006 в 22:45)
 

Именно так!
Код, составленный Loki, был правильным с самого начала, а моя проблема проистекала из того, что у меня установлена устаревшая версия рнр. Loki сделал наладку непосредственно на моем сайте, за что ему огромная благодарность и низкий поклон! Сейчас через деланный Loki скрипт люди уже читают книгу, над размещением которой я бился три дня, да и еще пришлось бы неизвестно сколько потратить времени! Большое спасибо Вам, Loki, за помощь и за отзывчивость!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования