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 :: Версия для печати :: Разрабртка CMS . Шаблонизатор .
Форумы портала PHP.SU » » Вопросы новичков » Разрабртка CMS . Шаблонизатор .

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

1. Freer - 11 Сентября, 2011 - 17:44:15 - перейти к сообщению
Здравствуйте. Я самый настоящий новичок в разработке CMS и нуждаюсь в помощи знающих людей. На форуме нашел несколько постов близких по теме, но они меня еще больше запутали Огорчение
В одной книге нашел простенький готовый шаблонизатор, но он почему не работает.
Файл "welcome.tpl"
CODE (htmlphp):
скопировать код в буфер обмена
  1. <p> Добро пожаловать <b>{USER}</b>
  2. <p> Дата вашего последнего визита: <b>{LAST}</b>
  3. <p> Дата регистрации: <b>{REG_DATE}</b>
  4. <p> Вами оставлено сообщений: <b>{MESSAGES}</b>
  5. <p> Новых личных сообщений: <b>{PERSONAL}</b>

файл "index.php"
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. //подключаем шаблонизатор
  4. require "template.php";
  5.  
  6. //определяем переменные, которые нужно внедрить в HTML-код
  7. $USER="Denis";
  8. $LAST="28.12.2009";
  9. $REG_DATE="01.02.2007";
  10. $MESSAGES=34;
  11. $PERSONAL=0;
  12.  
  13. //открываем шаблон
  14. $tpl->get_tpl('welcome.tpl');
  15.  
  16. //устанавливаем переменные шаблона
  17. $tpl->set_value('USER',$USER);
  18. $tpl->set_value('LAST',$LAST);
  19. $tpl->set_value('REG_DATE',$REG_FATE);
  20. $tpl->set_value('MESSAGES',$MESSAGES);
  21. $tpl->set_value('PERSONAL',$PERSONAL);
  22.  
  23. //запускаем парсинг шаблона
  24.  
  25. $tpl->tpl_parse();
  26.  
  27. //выводим HTML
  28. echo $tpl->html;
  29. ?>
  30.  

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


Тут где то опечатка или почему не выводятся данные?
2. White - 11 Сентября, 2011 - 18:14:50 - перейти к сообщению
Freer пишет:
foreach($this->values as $find =>$replase)
{
$this->html=str_replace($find,$replace,$this->html);
}
}

грамматика у вас страдает видимо. так $replaSe или $replaCe?
3. Freer - 11 Сентября, 2011 - 18:52:42 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. function tpl_parse()
  2.                 {
  3.                 foreach($this->values as $find ->$replace)
  4.                         {
  5.                         $this->html=str_replace($find,$replace,$this->html);
  6.                         }
  7.                 }
  8.         }


White, спасибо, что заметили опечатку, однако она не является причиной проблемы.
4. White - 11 Сентября, 2011 - 19:47:47 - перейти к сообщению
Freer
Freer пишет:
foreach($this->values as $find ->$replace)
как бы надо так:
PHP:
скопировать код в буфер обмена
  1. foreach($this->values as $find=>$replace)

Freer пишет:
$tpl->set_value('REG_DATE',$REG_FATE);

видимо судьба у этого кода такая...
5. Freer - 11 Сентября, 2011 - 20:39:57 - перейти к сообщению
Дико извиняюсь!!! Совсем уже голова не соображает: внес изменения только в исходные файлы, а не копии на сервере. Все работает. Большое спасибо за помощь. Был бы очень признателен если объяснили бы разницу между операторами
и
CODE (htmlphp):
скопировать код в буфер обмена
  1.  =>
Первый, как мне известно, является указателем, а для чего нужен второй?

P.S. White, обязательно поставлю плюсик, как только это функция станет мне доступна! А пока СПАСИБО в таком виде.
6. White - 11 Сентября, 2011 - 22:18:25 - перейти к сообщению
Freer второй указывает что соответствующему индексу в массиве (слева) равно определенное значение (справа)
7. Freer - 12 Сентября, 2011 - 13:15:03 - перейти к сообщению
Ясно! Спасибо большое!

 

Powered by ExBB FM 1.0 RC1