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.SU

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


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

> Описание: Посылаем переменные в шаблон
kazmikro
Отправлено: 04 Мая, 2011 - 20:58:09
Post Id



Гость


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


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




Блииин парни научите посылать переменные в файлы шаблона !

Допустим где-то в файле php есть переменная $name её нужно послать допустим в файл шаблона index.tpl в виде {name} ! До этого была такая тема на форуме но нечего не понял прошу обьяснить как нибудь по проще !!! Огромное спасибо заранее ! Закатив глазки
 
 Top
EuGen Администратор
Отправлено: 04 Мая, 2011 - 22:23:38
Post Id


Профессионал


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


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




В template.tpl:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. Это переменная {name}
  3.  

В файле test.php"
PHP:
скопировать код в буфер обмена
  1.  
  2. $name='Test!';
  3. $template=file_get_contents('template.tpl');
  4. $template=str_replace('{name}', $name, $template);
  5. echo($template);
  6.  


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DeepVarvar Супермодератор
Отправлено: 04 Мая, 2011 - 22:32:32
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Ээээ.. По простому так:

Контроллер и шаблонизатор.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. // задали пустой массив на всякий случай
  3. $args = array();
  4.  
  5. // получили переменные через запросы и расчеты
  6. $tpl = "templates/page.tpl";
  7. $args['name'] = "Вася";
  8. $args['lastname'] = "Пупкин";
  9.  
  10. // наш "ТРУ"-шаблонизатор
  11. function tpl_parser($tpl,$args) {
  12.   $tpl = file_get_contents($tpl);
  13.   if (count($args) > 0) {
  14.     // заменяем все что совпало с именами ключей
  15.     // на значения этих ключей массива
  16.     foreach ($args as $k => $v) $tpl = str_replace("{".$k."}",$v,$tpl);
  17.     }
  18.   return $tpl;
  19.   }
  20.  
  21. echo tpl_parser($tpl,$args);

Файл шаблона (в папке templates).
CODE (html):
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5.   <table border="1">
  6.     <tr>
  7.       <td>{name}</td><td>{lastname}</td>
  8.     </tr>
  9.   </table>
  10. </body>
  11. </html>

Вот и все...
Вопросы???
(Добавление)
Пока я писал - EuGen успел, однако я развернуто и для множества реплейсов..
 
 Top
kazmikro
Отправлено: 05 Мая, 2011 - 06:53:52
Post Id



Гость


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


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




блиииин Спасибо большое !! буду вечером пробовать !!! Спасибо огромное ! Улыбка Улыбка Улыбка
 
 Top
Alex_pac
Отправлено: 05 Мая, 2011 - 08:13:25
Post Id



Новичок


Покинул форум
Сообщений всего: 41
Дата рег-ции: Май 2011  


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




большое заблужение что файлы "шаблона" надо транслировать на-лету.

сначала их надо транслировать до формата php

PHP:
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5.   <table border="1">
  6.     <tr>
  7.       <td><?PHP echo $name; ?></td><td><?PHP echo $lastname; ?></td>
  8.     </tr>
  9.   </table>
  10. </body>
  11. </html>
  12.  
  13.  


потом что что транслировали сохранить как


index.tpl.php

и использовать в проекте вот таким образом:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. function show_index_page( $name, $lastname ) {
  4.     include ('index.tpl.php');
  5.     exit();
  6. }
  7.  
  8. $name1 = "Вася";
  9. $lastname1 = "Пупкин";
  10.  
  11. //переменные $name1 и $lastname1 получены в результате рассчетов
  12.  
  13. //выводим страницу
  14.  
  15.  
  16. show_index_page ($name1 , $lastname1 );
  17.  
  18. ?>


в таком случае получаем выйгрыш в производительности.

транслирование на-лету применяется при разработке шаблонов проекта.
А когда они готовы то все шаблоны транслируются в нормальную php форму.
И запускаются через простой include();

(Отредактировано автором: 05 Мая, 2011 - 08:17:26)

 
 Top
EuGen Администратор
Отправлено: 05 Мая, 2011 - 08:55:09
Post Id


Профессионал


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


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




А можно и сразу создавать шаблоны с php-кодом, минуя стадию преобразования и еще больше увеличивая производительность.
Но это - один из подходов.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DeepVarvar Супермодератор
Отправлено: 05 Мая, 2011 - 09:18:02
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Alex_pac
Человек спросил как реализовать в случае с "макросами" типа {name}
Когда ему приспичит иной вариант реализации, спросит сам.
Все должно быть последовательным.
Неужели вы сами сразу, вдруг, раз - и прозрели?
EuGen пишет:
Но это - один из подходов.

Точнее некуда.
Более того - именно подход с реплейсом макросов используется во многих популярных CMS.
 
 Top
kazmikro
Отправлено: 23 Мая, 2011 - 00:06:41
Post Id



Гость


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


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




а как теперь допустим засунуть в {login} содержимое файла login.php ???
 
 Top
OrmaJever Модератор
Отправлено: 23 Мая, 2011 - 00:11:49
Post Id



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


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


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






-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
komprenda
Отправлено: 23 Мая, 2011 - 05:27:41
Post Id


Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Май 2011  


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




EuGen пишет:
А можно и сразу создавать шаблоны с php-кодом, минуя стадию преобразования и еще больше увеличивая производительность.
Но это - один из подходов.


быдловерстальщики будут в шоке увидев теги "<?php" и "?>" и $, конечно {{$var}} приятнее видеть чем <?php echo($var); ?> да и писать короче, хотя php сам по себе суть есть шаблонизатор, это актуальнее для python'а или perl'а
 
 Top
CTAPu4OK
Отправлено: 23 Мая, 2011 - 07:59:44
Post Id



Гость


Покинул форум
Сообщений всего: 67
Дата рег-ции: Июль 2008  


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




komprenda пишет:
EuGen пишет:
А можно и сразу создавать шаблоны с php-кодом, минуя стадию преобразования и еще больше увеличивая производительность.
Но это - один из подходов.


быдловерстальщики будут в шоке увидев теги "<?php" и "?>" и $, конечно {{$var}} приятнее видеть чем <?php echo($var); ?> да и писать короче, хотя php сам по себе суть есть шаблонизатор, это актуальнее для python'а или perl'а


Для понтов да... шаблонизатор использовать тру.... но если проект большой, то использовать шаблонизаторы бред, жрут много, ибо шаблонизаторы по любому преобразуют шаблоны в PHP код....

CODE (html):
скопировать код в буфер обмена
  1. <div>
  2. <?foreach($array as $value):?>
  3.       <img src='<?=$value['img']?>' />
  4. <?endforeach;?>
  5. </div>

чем не шаблонизатор ?

А если псевдо-верстальщики боятся этого кода, то пусть катятся, другого найдут.
 
 Top
kazmikro
Отправлено: 23 Мая, 2011 - 14:02:26
Post Id



Гость


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


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




OrmaJever пишет:


чёт не много не понял , вот он засовывает в {login}файл login.php , а как его теперь отправить {login} в файл tpl >?
 
 Top
OrmaJever Модератор
Отправлено: 23 Мая, 2011 - 15:57:43
Post Id



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


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


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




CTAPu4OK пишет:
А если псевдо-верстальщики боятся этого кода, то пусть катятся, другого найдут.

... то пусть идут работать на завод Хм
kazmikro пишет:
чёт не много не понял , вот он засовывает в {login}файл login.php , а как его теперь отправить {login} в файл tpl >?

А куда и зачем записывать? Однако
PHP:
скопировать код в буфер обмена
  1. $text = file_get_contents('index.tpl'); // открываем файл шаблона
  2. $text = str_replace('{login}', file_get_contents('login.php'), $text); // заменяем из шаблона {login} на содержимое файла
  3. echo $text; // выводим содержимое в браузер

Что из этого не понятно?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
kazmikro
Отправлено: 23 Мая, 2011 - 16:53:04
Post Id



Гость


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


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




Всё спасибо большое разобрался ))))))) Язычок Язычок Язычок
 
 Top
komprenda
Отправлено: 24 Мая, 2011 - 00:50:31
Post Id


Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Май 2011  


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




kazmikro пишет:
Всё спасибо большое разобрался ))))))) Язычок Язычок Язычок


Это пример самого простого шаблонизатора на php(native php, как выше написалит городить велосипед на велосипеде не стоит(шаблонизатор на шаблонизаторе))

index.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. require_once('view.php');
  4.  
  5. $data = array(
  6.     'title' => 'Untitled',
  7.     'body' => 'Text here.'
  8. );
  9.  
  10. $view = new View; // $view = new View('template.php');
  11. $view->load('template.php');
  12. $view->assign($data);
  13. $view->assign('author', 'Неизвестный автор');
  14. $view->body = 'Привет, мир!';
  15. $view->title = 'Заголовок';
  16. $view->title .= " страницы";
  17. var_dump($view->getVars());
  18. $view->display(); // $content = $view->display(1);
  19. $view->clearVars();
  20. var_dump($view->getVars());
  21.  
  22. ?>
  23.  


view.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. class View {
  4.     private $_tplfile;
  5.     private $_vars = array();
  6.    
  7.     public function __construct($tpl_file = null) {
  8.         if (!is_null($tpl_file)) {
  9.             $this->load($tpl_file);
  10.         }
  11.     }
  12.    
  13.     public function load($tpl_file) {
  14.         $this->_tplfile = $tpl_file;
  15.     }
  16.    
  17.     // $view->var = 'значение' то же самое, что и $view->assign('var', 'значение')
  18.     public function __set($name, $value) {
  19.         $this->_vars[$name] = $value;
  20.     }
  21.    
  22.     public function __get($name) {
  23.         return $this->_vars[$name];
  24.     }
  25.    
  26.     /**
  27.      *
  28.      * Передать переменную в шаблон(View)
  29.      * Пример #1:
  30.      * $view->assign(array('var' => 'значение'[, 'var1' => 'значение1'[, ...]]));
  31.      * Пример #2:
  32.      * $view->assign('var', 'значение');
  33.      */
  34.     public function assign() {
  35.         $k = func_num_args();
  36.         if ($k == 1) {
  37.             foreach (func_get_arg(0) as $name => $value) {
  38.                 $this->_vars[$name] = $value;
  39.             }
  40.         }
  41.         else if ($k == 2) {
  42.             $name = func_get_arg(0);
  43.             $value = func_get_arg(1);
  44.             $this->_vars[$name] = $value;
  45.         }
  46.     }
  47.    
  48.     /**
  49.      *
  50.      * Возвращает все переданные переменные
  51.      * return array
  52.      */
  53.     public function getVars() {
  54.         return $this->_vars;
  55.     }
  56.    
  57.     /**
  58.      *
  59.      * Метод для удаления переменных, используемых в шаблоне(View'е)
  60.      */
  61.     public function clearVars() {
  62.         $this->_vars = array();
  63.     }
  64.    
  65.     public function display($output_buffering = false) {
  66.         ob_start();
  67.         extract($this->_vars);
  68.         require_once($this->_tplfile);
  69.         if ($output_buffering) {
  70.             $content = ob_get_contents();
  71.             ob_clean();
  72.             return $content;
  73.         }
  74.         return ob_end_flush();
  75.     }
  76. }
  77.  
  78. ?>
  79.  


template.php
PHP:
скопировать код в буфер обмена
  1. <!DOCTYPE html>
  2.     <head>
  3.         <meta charset="utf-8" />
  4.         <title><?PHP echo($title); ?></title>
  5.     </head>
  6.     <body>
  7.         <?PHP echo($body); ?>  
  8.         <br />    
  9.         &copy; <?PHP echo($author); ?>, 2011
  10.     </body>
  11. </html>
  12.  

(Отредактировано автором: 25 Мая, 2011 - 10:45:31)

 
 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