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.SU » » Вопросы новичков » Переменные

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

1. kazmikro - 04 Мая, 2011 - 20:58:09 - перейти к сообщению
Блииин парни научите посылать переменные в файлы шаблона !

Допустим где-то в файле php есть переменная $name её нужно послать допустим в файл шаблона index.tpl в виде {name} ! До этого была такая тема на форуме но нечего не понял прошу обьяснить как нибудь по проще !!! Огромное спасибо заранее ! Закатив глазки
2. EuGen - 04 Мая, 2011 - 22:23:38 - перейти к сообщению
В 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.  
3. DeepVarvar - 04 Мая, 2011 - 22:32:32 - перейти к сообщению
Ээээ.. По простому так:

Контроллер и шаблонизатор.
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 успел, однако я развернуто и для множества реплейсов..
4. kazmikro - 05 Мая, 2011 - 06:53:52 - перейти к сообщению
блиииин Спасибо большое !! буду вечером пробовать !!! Спасибо огромное ! Улыбка Улыбка Улыбка
5. Alex_pac - 05 Мая, 2011 - 08:13:25 - перейти к сообщению
большое заблужение что файлы "шаблона" надо транслировать на-лету.

сначала их надо транслировать до формата 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();
6. EuGen - 05 Мая, 2011 - 08:55:09 - перейти к сообщению
А можно и сразу создавать шаблоны с php-кодом, минуя стадию преобразования и еще больше увеличивая производительность.
Но это - один из подходов.
7. DeepVarvar - 05 Мая, 2011 - 09:18:02 - перейти к сообщению
Alex_pac
Человек спросил как реализовать в случае с "макросами" типа {name}
Когда ему приспичит иной вариант реализации, спросит сам.
Все должно быть последовательным.
Неужели вы сами сразу, вдруг, раз - и прозрели?
EuGen пишет:
Но это - один из подходов.

Точнее некуда.
Более того - именно подход с реплейсом макросов используется во многих популярных CMS.
8. kazmikro - 23 Мая, 2011 - 00:06:41 - перейти к сообщению
а как теперь допустим засунуть в {login} содержимое файла login.php ???
9. OrmaJever - 23 Мая, 2011 - 00:11:49 - перейти к сообщению
10. komprenda - 23 Мая, 2011 - 05:27:41 - перейти к сообщению
EuGen пишет:
А можно и сразу создавать шаблоны с php-кодом, минуя стадию преобразования и еще больше увеличивая производительность.
Но это - один из подходов.


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

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

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


чёт не много не понял , вот он засовывает в {login}файл login.php , а как его теперь отправить {login} в файл tpl >?
13. OrmaJever - 23 Мая, 2011 - 15:57:43 - перейти к сообщению
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; // выводим содержимое в браузер

Что из этого не понятно?
14. kazmikro - 23 Мая, 2011 - 16:53:04 - перейти к сообщению
Всё спасибо большое разобрался ))))))) Язычок Язычок Язычок
15. komprenda - 24 Мая, 2011 - 00:50:31 - перейти к сообщению
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.  

 

Powered by ExBB FM 1.0 RC1