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]   

> Без описания
m33_nft
Отправлено: 24 Августа, 2011 - 02:36:49
Post Id



Новичок


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


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




Прошу прощения за глупый вопрос.
Имеется шаблонизатор :

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

Я новичек, и очень расчитываю на вашу помощь. Могу написать быдло кодом это всё, но хочу познать ООП. желательно пишите комментарии к коду. Заранее спасибо

(Отредактировано автором: 24 Августа, 2011 - 02:38:41)

 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Августа, 2011 - 07:11:07
Post Id



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


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


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




m33_nft пишет:
menu extends templates
Очень впечатляет..
Не пихайте куда попало ООП.
Иначе уже ожидаю: class link extends menu, class copyright extends template, class year extends copyright....

Избавьтесь от запросов в цикле выбора подкатегорий.
 
 Top
m33_nft
Отправлено: 24 Августа, 2011 - 12:20:07
Post Id



Новичок


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


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




DeepVarvar пишет:
Избавьтесь от запросов в цикле выбора подкатегорий.


Простите, зачем?
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Августа, 2011 - 12:54:01
Post Id



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


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


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




Затем чтобы на одно меню не было по 150 запросов на страницу...
 
 Top
m33_nft
Отправлено: 24 Августа, 2011 - 13:30:15
Post Id



Новичок


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


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




Хорошо. Но а с главным вопросом поможете? Переписать шаблонизатор и передать туда называния меню и подменю ?
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Августа, 2011 - 14:57:05
Post Id



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


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


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




Вечером набросаю примерчик
 
 Top
m33_nft
Отправлено: 24 Августа, 2011 - 19:17:43
Post Id



Новичок


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


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




Просто таких "модулей" как меню полно. и на этом примере я бы хотел понять принцип и подключать и их.
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Августа, 2011 - 19:24:14
Post Id



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


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


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




Простейший шаблонизатор:
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");

(Отредактировано автором: 24 Августа, 2011 - 19:26:15)

 
 Top
m33_nft
Отправлено: 25 Августа, 2011 - 00:08:38
Post Id



Новичок


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


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




Вы уж извините, но я ничерта не понял. мне не нужен Ваш простейший шаблонизатор. Конкретно что в моем дописать, и как упростить запрос убрав циклы лишниие. Помещать ли функции меню в класс отдельный ? или же как то по другому это реальизовать (в плане структуры) И если не делать дочерний класс меню то каким образом передать переменные (называния полей и подполей) в tpl->set_value()

Пожалуйста без ссылок на гугл.
(Добавление)
В примере меню куда вы меня направили, там разметка не отделена вообще от кода. Why?
 
 Top
DeepVarvar Супермодератор
Отправлено: 25 Августа, 2011 - 00:14:44
Post Id



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


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


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




m33_nft пишет:
как упростить запрос убрав циклы лишниие
смотрите ссылку на ф-цию которая строит готовое меню, там смените ключи на свои имена полей. Визуализация допиливается с помощью CSS.
m33_nft пишет:
каким образом передать переменные
методы те же что и у меня в примере.

В шаблонизатор ничего дописывать не надо.
 
 Top
m33_nft
Отправлено: 25 Августа, 2011 - 09:50:09
Post Id



Новичок


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


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




ссылка более не доступна
 
 Top
DeepVarvar Супермодератор
Отправлено: 25 Августа, 2011 - 12:49:02
Post Id



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


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


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




 
 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