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. m33_nft - 24 Августа, 2011 - 02:36:49 - перейти к сообщению
Прошу прощения за глупый вопрос.
Имеется шаблонизатор :

PHP:
скопировать код в буфер обмена
  1. class templates
  2. {
  3. var $values             = array ();
  4. var $type;
  5. var $html ;
  6.  
  7.  
  8. function get_tpl ($tpl_name)
  9. {
  10.                                         if (empty($tpl_name) || !file_exists($tpl_name))
  11.                                                 {
  12.                                                         return false;
  13.                                                 }
  14.  
  15.                                                 else
  16.                                                 {
  17.                                                        
  18.                                                 $this->html = join('',file ($tpl_name));
  19.                                                         }
  20.                                                
  21.                                                         }
  22.  
  23.        
  24. function set_value($key,$var)
  25.                                         {
  26.                                                 $key = '{' .$key . '}';
  27.                                                 $this->values[$key] = $var;
  28.                                         }
  29.                                        
  30. function tpl_parse ()
  31.                                         {
  32.                                                 foreach ($this->values as $find => $replace )
  33.                                                                 {
  34.                                                                         $this->html = str_replace ($find, $replace , $this->html );
  35.                                                                 }
  36.                                         }
  37.        
  38.  
  39. }
  40.  
  41.  
  42.  
  43. ?>


и имеется модуль меню с выпадающими подпунктами

PHP:
скопировать код в буфер обмена
  1.  
  2. mysql_connect("localhost","user","1");
  3.  
  4. class menu extends templates
  5. {
  6.                                 var $type = 'menu';
  7.                                 var $main_menu = array ();
  8.                                 var $sub_menu= array ();
  9.                                
  10.                                                         function select_menu() {
  11.                                
  12.                                                 $q = mysql_query('SELECT menu_id,menu_name FROM eway_menu WHERE menu_type=0');
  13.                                                 for ($main_menu=0; $main_menu<mysql_num_rows($q); $main_menu++)
  14.                                
  15.                                                 {
  16.                                
  17.                                                  $array[$main_menu] = mysql_result($q,$main_menu,'menu_name');
  18.                                                 $t = mysql_query('SELECT menu_name FROM eway_menu WHERE menu_group='.mysql_result($q,$main_menu,'menu_id').' AND menu_type!=0');
  19.                                                 for ($sub_menu=0; $sub_menu<mysql_num_rows($t); $sub_menu++)
  20.                                                 $array[$main_menu][$sub_menu] = mysql_result($t,$sub_menu,'menu_name');
  21.                                
  22.                                                 }
  23.                                
  24.                                         }
  25. }
  26.  


Как правильно переписать шаблонизатор, или обратиться к нему чтобы передать значения массива (меню + выпадающее меню соответсвенно с группой) названия и прочее (ссылки и тп )


шабллнизатор работает по принципу

PHP:
скопировать код в буфер обмена
  1. $tpl = new templates;
  2.  
  3. $tpl->get_tpl (TMPL_DEFAULT_DIR.'/header.tpl');
  4. $tpl->set_value(tpl_dir,'modules/templates/default/');
  5. $tpl->tpl_parse();
  6. echo $tpl->html;


Помогите разобраться и дописать шаблонизатор. И как лучше формировать список загружаемых шаблонов .tpl в отдельном файле ? я имею в виду чтобы после авторизации блок welcome.tpl заменяла к примеру cabinet.tpl

Я новичек, и очень расчитываю на вашу помощь. Могу написать быдло кодом это всё, но хочу познать ООП. желательно пишите комментарии к коду. Заранее спасибо
2. DeepVarvar - 24 Августа, 2011 - 07:11:07 - перейти к сообщению
m33_nft пишет:
menu extends templates
Очень впечатляет..
Не пихайте куда попало ООП.
Иначе уже ожидаю: class link extends menu, class copyright extends template, class year extends copyright....

Избавьтесь от запросов в цикле выбора подкатегорий.
3. m33_nft - 24 Августа, 2011 - 12:20:07 - перейти к сообщению
DeepVarvar пишет:
Избавьтесь от запросов в цикле выбора подкатегорий.


Простите, зачем?
4. DeepVarvar - 24 Августа, 2011 - 12:54:01 - перейти к сообщению
Затем чтобы на одно меню не было по 150 запросов на страницу...
5. m33_nft - 24 Августа, 2011 - 13:30:15 - перейти к сообщению
Хорошо. Но а с главным вопросом поможете? Переписать шаблонизатор и передать туда называния меню и подменю ?
6. DeepVarvar - 24 Августа, 2011 - 14:57:05 - перейти к сообщению
Вечером набросаю примерчик
7. m33_nft - 24 Августа, 2011 - 19:17:43 - перейти к сообщению
Просто таких "модулей" как меню полно. и на этом примере я бы хотел понять принцип и подключать и их.
8. DeepVarvar - 24 Августа, 2011 - 19:24:14 - перейти к сообщению
Простейший шаблонизатор:
PHP:
скопировать код в буфер обмена
  1. class template {
  2.   private $vars = array();
  3.   function assign($name,$value) {
  4.     if (!isset($this->vars[$name]))
  5.         $this->vars[$name] = $value;
  6.     else die("второй раз не пихай, мы опытом научены!");
  7.     }
  8.   function draw($tpl) {
  9.     if (!file_exists($tpl)) die("Шаблона нету!");
  10.     $tpl = file_get_contents($tpl);
  11.     if (count($this->vars) > 0) {
  12.       foreach ($this->vars as $name => $value)
  13.         $tpl = str_replace("{".$name."}",$value,$tpl);
  14.       }
  15.     return $tpl;
  16.     }
  17.   }

Меню возьмите отсюда: http://forum.php.su/topic.php?fo...99446#1314199446

Шаблон:
CODE (html):
скопировать код в буфер обмена
  1. <div>
  2. <h1>Main menu</h1>
  3. {menu}
  4. </div>


Работаем:
PHP:
скопировать код в буфер обмена
  1. $arr = array();
  2. $result = mysql_query("SELECT * FROM menu");
  3. while ($row = mysql_fetch_assoc($result)) $arr[] = $row;
  4. $menu = buildTree($arr);
  5.  
  6. $page = new template;
  7. $page->assign("menu",$menu);
  8. echo $page->draw("templates/main.tpl");
9. m33_nft - 25 Августа, 2011 - 00:08:38 - перейти к сообщению
Вы уж извините, но я ничерта не понял. мне не нужен Ваш простейший шаблонизатор. Конкретно что в моем дописать, и как упростить запрос убрав циклы лишниие. Помещать ли функции меню в класс отдельный ? или же как то по другому это реальизовать (в плане структуры) И если не делать дочерний класс меню то каким образом передать переменные (называния полей и подполей) в tpl->set_value()

Пожалуйста без ссылок на гугл.
(Добавление)
В примере меню куда вы меня направили, там разметка не отделена вообще от кода. Why?
10. DeepVarvar - 25 Августа, 2011 - 00:14:44 - перейти к сообщению
m33_nft пишет:
как упростить запрос убрав циклы лишниие
смотрите ссылку на ф-цию которая строит готовое меню, там смените ключи на свои имена полей. Визуализация допиливается с помощью CSS.
m33_nft пишет:
каким образом передать переменные
методы те же что и у меня в примере.

В шаблонизатор ничего дописывать не надо.
11. m33_nft - 25 Августа, 2011 - 09:50:09 - перейти к сообщению
ссылка более не доступна
12. DeepVarvar - 25 Августа, 2011 - 12:49:02 - перейти к сообщению
http://forum.php.su/topic.php?fo...99446#1314199446

 

Powered by ExBB FM 1.0 RC1