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 файла, что выдала бы HTML как строку

 PHP.SU

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


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

> Описание: Нужна функция генерации шаблона из PHP файла, что выдала бы HTML как строку
google_funny
Отправлено: 12 Января, 2016 - 00:36:55
Post Id


Новичок


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


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




Здравствуйте, помогите с функцией...

Мне нужно написать функцию, в которая сгенерирует HTML из php файла шаблона и выдаст рез. HTML в виде строки, чтобы я мог вставить его в любом месте кода. т.е HTML шаблон брался из php файла примерно такого контента, как дам ниже, и в него включаем данные из массива $data функции)
т.е. чтобы я не писал в функции вот такие штуки:
PHP:
скопировать код в буфер обмена
  1.  $html .='<h1 class="">.$data["title"].'</h1>';
  2. $html .='<div class="main_image">.$data["image"].'</div>';


Возможно, мне нужно сипользовать что-то связанное с ob_flush()... подскажите пожалуйста...

Спойлер (Отобразить)

а вот php шаблон в который должны вставлятся данные из массива $data функции
PHP:
скопировать код в буфер обмена
  1.  
  2. <?if ($data['title']) {?>
  3.         <h1 class=""><?print $data['title']?></h1>
  4.         <?if ($data['thumb'] !='') {?>
  5.         <div class="main_image">
  6.                 <img src="<?print $data['thumb']?>" alt="<?print $data['title']?>" width="259"/>
  7.         </div>
  8.         <?}?>
  9.         <div class="video-action-tab download-tab">
  10. <?foreach ($data['video_download_links'] as $key=>$link) {
  11.                
  12.                 if ($link['link'] !='') {
  13.                                 $p = ($key !='mobile')? 'p' :'';?>
  14.                                 <div class="video_download_links">
  15.                                         <a href="<?print $link['link']?>" target="_blank" class="downloadBtn greyButton"><i></i><span></span> <?print $key.$p?></a>                    
  16.                                         <span class="video-size"><?print round($link['size']/(1024*1024),2).' Mb.'?></span>
  17.                                 </div>         
  18.                 <?}?>
  19.         <?}?>
  20.         <div class="clear"></div>
  21.         </div>
  22.         <div class="clear"></div>
  23. <?}?>
  24.  
 
 Top
Viper
Отправлено: 12 Января, 2016 - 01:49:12
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




1. Почитайте для начала что такое шаблонизатор и как он работает.
Для примера twig.
2. Почитайте про реализацию view в MVC

Самое простейшее
PHP:
скопировать код в буфер обмена
  1. protected $_template = null; // Путь к шаблону
  2.  
  3. ...
  4.  
  5. public function loadTpl()
  6. {
  7.         $this->_output = null;
  8.         ob_start();
  9.         include $this->_template;
  10.         $this->_output = ob_get_contents();
  11.         ob_end_clean();
  12.         return $this->_output;
  13. }
  14.  
  15. public function display($tpl=null)
  16. {
  17.         $result = $this->loadTpl($tpl);
  18.         echo $result;
  19. }

В view дергаете display()

(Отредактировано автором: 12 Января, 2016 - 01:49:51)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
google_funny
Отправлено: 12 Января, 2016 - 03:56:19
Post Id


Новичок


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


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




Большое спасибо за ваш ответ! На основе данной вами инфо составил простую функцию.. пока ее вполне достаточно.. если понадобится надобность в стороннем шаблонизаторе - обращюсь к TWIG

вот моя функция. Работает как нужно) Еще раз спасибо!
PHP:
скопировать код в буфер обмена
  1.  
  2. function generate_layout ($data, $config, $full_layout = false) {
  3.         $layout_html = '';
  4.         $layout = ($full_layout) ? JPATH_BASE.DS.'layout_full.php' : JPATH_BASE.DS.'layout.php';       
  5.         if (is_array($data) && count($data)) {
  6.                 ob_start();    
  7.                 if (file_exists($layout)) {require_once($layout); $layout_html = ob_get_clean();} else {
  8.                         $error = 'ERROR: Couldn\'t find layout template file. Is it exists there: "'.$layout.'"? Thank you!';
  9.                         trigger_error($error, E_USER_ERROR);    exit;
  10.                 }
  11.         } else {
  12.                 $error = 'ERROR: Don\'t have DATA for generating layout! Please provide me an array with correct data. Thank you!';
  13.                 trigger_error($error, E_USER_ERROR);
  14.         }
  15.         return $layout_html;
  16. }
 
 Top
Viper
Отправлено: 12 Января, 2016 - 10:24:06
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




google_funny судя по коду у вас Joomla. У неё есть loadTemplate() метод. Т.е. если вы хотите свой шаблон загрузить в View в методе display() делаете
parent::display('my_template'); где my_template это файл default_my_template.php в папке tmpl.
Непосредственно в шаблоне вывести другой шаблон
echo $this->loadTemplate('my_template');

Также в ветке 3.3(если память не изменяет) появились layouts.
Их можно загружать через JLayoutRender();


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
google_funny
Отправлено: 12 Января, 2016 - 19:48:31
Post Id


Новичок


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


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




Viper Огромное вам спасибо! Вы мне очень помогаете!

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



которую я использовал в функции. Может-быть в будущем, буду использовать этот скрипт с Жомла, поэтому и решил ввести такую константу.

Жомла - очень хорошая и мощная CMS и при правильном использовании - можно очень хорошие и сложные сайты делать! и что важно - они будут хорошо защищены от разных хакерских атак)

Я вот посмотрел компонент коноархив, что у вас в подписи! ОЧЕНЬ ХОРОШИЙ КОМПОНЕНТ!
Вы его сами написали? я его хочу использовать на сайте.. такая мощь! мне еще в роли киноархива нравится использовать K2 - вот если бы мод К2 выпустить с тем функционалом, что у вас в КИНОАРХИВЕ, то вообще был бы просто ШТОРМ)
 
 Top
Viper
Отправлено: 13 Января, 2016 - 17:33:14
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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





google_funny пишет:
Вы его сами написали? я его хочу использовать на сайте.. такая мощь! мне еще в роли киноархива нравится использовать K2 - вот если бы мод К2 выпустить с тем функционалом, что у вас в КИНОАРХИВЕ, то вообще был бы просто ШТОРМ)

Сам.
Модулем не получится Улыбка Слишком большой компонент.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB