Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: PHP шаблонизация
Форумы портала PHP.SU » » Вопросы новичков » PHP шаблонизация

Страниц (1): [1]
 

1. IstonRU - 16 Февраля, 2013 - 14:53:25 - перейти к сообщению
Здравствуйте

Ищу ответ на вопрос "Как сделать шаблон на php". На многих форумах задают один и тот же вопрос - "Как сделать шаблон на php". Дорогие профессионалы, предлагаю Вам ответить на этот вопрос "раз и навсегда".

В большинстве случаев, вопрос заключается в том, что люди(как и я) хотят менять контент на сайте, и при этом не менять "основу" страницы.

Подробное описание:

Есть файл index.php, примерно следующего содержания:

PHP:
скопировать код в буфер обмена
  1. </head>
  2. <body>
  3. <div class="container">
  4.         <?PHP include("header.php");?>         
  5.         <div class="glass">
  6.     </div>
  7.     <div class="content">
  8.     </div>
  9.         <?PHP include("footer.php");?>    
  10. </div>
  11. </body>
  12. </html>


Суть в том, что в файле header.php содержится меню в виде <ul> с различными ссылками, при нажатие на пункты меню, нужно, чтобы в index.php менялся только контент.
2. esterio - 16 Февраля, 2013 - 14:57:54 - перейти к сообщению
Чуствую щас начется холивар на теу шаблонизаторов в ПХП
IstonRU пишет:
Суть в том, что в файле header.php содержится меню в виде <ul> с различными ссылками, при нажатие на пункты меню, нужно, чтобы в index.php менялся только контент.

тоесть вам нужно изменитьконтент без перезагрузки страницы - AJAX.

если ще вам нужно подмена контенто относительно ссилкы, подключайте файл тот который нужно. Условние оператори вам помогут
3. etoYA - 16 Февраля, 2013 - 15:05:35 - перейти к сообщению
думаю....

index.php
PHP:
скопировать код в буфер обмена
  1. <p><?PHP include('data.php');?></p>

data.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $page = isset($_GET['page']) ? $_GET['page'] : 'index';
  3. switch ($page){
  4.         case 'index':
  5.                 echo 'this is index';
  6.                 break;
  7.         case 'news':
  8.                 echo 'this is news';
  9.                 break;
  10.         default:
  11.                 echo '404 error';
  12.                 continue;
  13. }
  14. ?>


Там где content, подключаешь файл data.php, ну и при переходе по ссылкам подключаешь нужную страницу.

_http://site.com/index.php?page=index
4. IstonRU - 16 Февраля, 2013 - 15:18:46 - перейти к сообщению
etoYA

Я так понимаю, что $_GET['page'] принимает из url название файла не учитывая .php? Вообще-то все у меня работает, но как, я не пойму Растерялся . Простите, что я "индус".
5. etoYA - 16 Февраля, 2013 - 15:21:00 - перейти к сообщению
IstonRU, нет, оно не принимает наз-ние файла.

Я специально для этого и показал

тут можно делать что угодно, хоть из базы выбирать..

Хотите добавить страницу? Ок

PHP:
скопировать код в буфер обмена
  1.  
  2. case 'somepage':
  3.      // some actions
  4.      break;
  5.  


Оно передает параметр в управляющую конструкцию switch case, и взависимости от параметра выполняется действие.
6. IstonRU - 16 Февраля, 2013 - 15:38:32 - перейти к сообщению
etoYA

Что делает эта строка?
PHP:
скопировать код в буфер обмена
  1. $page = isset($_GET['page']) ? $_GET['page'] : 'index';


$page принимает значение $_GET['page'] или индекс в зависимости от того установлена ли $_GET['page']?

Я все равно ничего не пойму. Вот у меня такие ссылки:
<a href="page1.php"> - страница 1
<a href="page2.php"> - страница 2
<a href="page3.php"> - страница 3
<a href="page4.php"> - страница 4

Это все в header.php, как меню.
Я нажимаю на ссылку(любую) меня перекидывает на этот скрипт, весь шаблон что в index сразу пропадает. А мне нужно, чтобы то, что выдает скрипт, находящийся по ссылкам, выкидывал всю инфу в content, что в index.php.

Вы написали про data.php, как этот скрипт понимает, какую ссылку я нажал?
7. esterio - 16 Февраля, 2013 - 15:42:11 - перейти к сообщению
Вам стоит ознакомится что такое Front Controller.

А по существу ето всего лиць пример. Все сводится к тому чтоб по некой переменной опредилить какой контент показивать
8. etoYA - 16 Февраля, 2013 - 15:45:17 - перейти к сообщению
IstonRU пишет:
Что делает эта строка?

Это сокращенное условие

думаю так будет понятней

PHP:
скопировать код в буфер обмена
  1. if (isset($_GET['page'])){
  2.      $page = $_GET['page'];
  3. }
  4. else $page = 'index';
9. imya - 16 Февраля, 2013 - 16:07:12 - перейти к сообщению
etoYA пишет:
IstonRU пишет:
Что делает эта строка?

Это сокращенное условие


Вернее, тернарный оператор.
10. etoYA - 16 Февраля, 2013 - 16:16:45 - перейти к сообщению
imya пишет:
Вернее, тернарный оператор.

Ага именно, но как видишь, челевоку чем проще - тем лучше.
(Добавление)
Измините это
IstonRU пишет:
<a href="page1.php"> - страница 1
<a href="page2.php"> - страница 2

На это
PHP:
скопировать код в буфер обмена
  1. <a href="?page=page1">
  2. <a href="?page=page2">


И в дата (до default: ) добавьте
PHP:
скопировать код в буфер обмена
  1.  
  2.         case 'page1':
  3.                 // тут подключаем файл с названием page1.php
  4.                 require_once('page1.php');
  5.                 break;
  6.         case 'page2':
  7.                 // а тут ничего не подключаем, просто выведем, что пользователь на странице #2
  8.                 echo 'Добро пожаловать на страницу Page2';
  9.                 break;
  10.  
11. LIME - 16 Февраля, 2013 - 17:06:59 - перейти к сообщению

imya пишет:
Вернее, тернарный оператор.

тогда $i++ не постинкремент а унарный оператор?))
дело в том что в пхп всего один тернарный оператор но это более общее название а не его собственное

(Добавление)

и раз пошла такая пьянка то и сокращенным условием это тоже не совсем является так это именно оператор который возвращает значение и может участвовать в выражении
12. IstonRU - 16 Февраля, 2013 - 17:31:36 - перейти к сообщению
Кажется теперь я во всем разобрался.

Объявляя переменную $page мы можем передать её сценарию с помощью $_GET['page']. Если она не заданна, то по умолчанию = index. Переходя по ссылкам, мы присваиваем ей значение, а уже в зависимости от того, какое у неё значение, выводим тот или иной контент.

Всем огро-о-о-о-о-о-мное спасибо!
13. Okula - 16 Февраля, 2013 - 19:13:21 - перейти к сообщению
не проще ли взять уже готовое решение? например шаблонизатор Twig.
14. LIME - 16 Февраля, 2013 - 19:19:53 - перейти к сообщению
какие преимущества он дает?
15. Okula - 17 Февраля, 2013 - 12:25:34 - перейти к сообщению
LIME, простые понятные шаблоны. Довольн мощные инструменты, такие как кеширование шаблонов, наследование шаблонов, использование встроеных фильтров, макросы, возможность регистрировать свои фильтры и т.д.
Все возможности можно посмотреть на сайте http://twig[dot]sensiolabs[dot]org

 

Powered by ExBB FM 1.0 RC1