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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: PHP шаблонизация

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: PHP шаблонизация
IstonRU
Отправлено: 16 Февраля, 2013 - 14:53:25
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Здравствуйте

Ищу ответ на вопрос "Как сделать шаблон на 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 менялся только контент.
 
 Top
esterio
Отправлено: 16 Февраля, 2013 - 14:57:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




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

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

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



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




думаю....

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
 
 Top
IstonRU
Отправлено: 16 Февраля, 2013 - 15:18:46
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




etoYA

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



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




IstonRU, нет, оно не принимает наз-ние файла.

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

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

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

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


Оно передает параметр в управляющую конструкцию switch case, и взависимости от параметра выполняется действие.

(Отредактировано автором: 16 Февраля, 2013 - 15:22:32)

 
 Top
IstonRU
Отправлено: 16 Февраля, 2013 - 15:38:32
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




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, как этот скрипт понимает, какую ссылку я нажал?
 
 Top
esterio
Отправлено: 16 Февраля, 2013 - 15:42:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Вам стоит ознакомится что такое Front Controller.

А по существу ето всего лиць пример. Все сводится к тому чтоб по некой переменной опредилить какой контент показивать
 
 Top
etoYA
Отправлено: 16 Февраля, 2013 - 15:45:17
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




IstonRU пишет:
Что делает эта строка?

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

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

PHP:
скопировать код в буфер обмена
  1. if (isset($_GET['page'])){
  2.      $page = $_GET['page'];
  3. }
  4. else $page = 'index';
 
 Top
imya
Отправлено: 16 Февраля, 2013 - 16:07:12
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


Помог: 19 раз(а)




etoYA пишет:
IstonRU пишет:
Что делает эта строка?

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


Вернее, тернарный оператор.


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
etoYA
Отправлено: 16 Февраля, 2013 - 16:16:45
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




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.  

(Отредактировано автором: 16 Февраля, 2013 - 16:21:25)

 
 Top
LIME
Отправлено: 16 Февраля, 2013 - 17:06:59
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)





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

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

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

и раз пошла такая пьянка то и сокращенным условием это тоже не совсем является так это именно оператор который возвращает значение и может участвовать в выражении
 
 Top
IstonRU
Отправлено: 16 Февраля, 2013 - 17:31:36
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)




Кажется теперь я во всем разобрался.

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

Всем огро-о-о-о-о-о-мное спасибо!
 
 Top
Okula
Отправлено: 16 Февраля, 2013 - 19:13:21
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




не проще ли взять уже готовое решение? например шаблонизатор Twig.
 
 Top
LIME
Отправлено: 16 Февраля, 2013 - 19:19:53
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




какие преимущества он дает?
 
 Top
Okula
Отправлено: 17 Февраля, 2013 - 12:25:34
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




LIME, простые понятные шаблоны. Довольн мощные инструменты, такие как кеширование шаблонов, наследование шаблонов, использование встроеных фильтров, макросы, возможность регистрировать свои фильтры и т.д.
Все возможности можно посмотреть на сайте http://twig[dot]sensiolabs[dot]org
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB