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 [2]

 PHP.SU

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


 Страниц (5): « 1 [2] 3 4 5 »   

> Без описания
Мелкий Супермодератор
Отправлено: 25 Марта, 2016 - 13:32:41
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




A320_Pilot пишет:
опять только последняя выводится

Так понимаю, характерный признак работы цикла не настораживает?

Как вы думаете, следующий код что выведет?
PHP:
скопировать код в буфер обмена
  1. for ($i=0; $i < 3; $i++) {
  2.     $data = $i;
  3. }
  4. echo $data;

012?
Или только последний, потому что каждая итерация заменяет данные?

Проверьте поведение своего шаблонизатора.

И в целом, как что-то подсказывать, если вы ни шаблона ни шаблонизатор не предоставили?


-----
PostgreSQL DBA
 
 Top
A320_Pilot
Отправлено: 25 Марта, 2016 - 13:35:58
Post Id



Гость


Покинул форум
Сообщений всего: 70
Дата рег-ции: Сент. 2012  
Откуда: Россия, Москва


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




шаблонизатор:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class Template {
  3.         var $dir = '.';
  4.         var $template = null;
  5.         var $copy_template = null;
  6.         var $data = array();
  7.         var $block_data = array();
  8.         var $result = array('info' => '',
  9.                                                 'vote' => '',
  10.                                                 'speedbar' => '',
  11.                                                 'content' => ''
  12.                                                 );
  13.         var $template_parse_time = 0;
  14.         function set($name , $var) {
  15.                 if (is_array($var) && count($var)) {
  16.                         foreach ($var as $key => $key_var) {
  17.                                 $this->set($key , $key_var);
  18.                         } } else $this->data[$name] = $var;
  19.         }
  20.         function set_block($name , $var) {
  21.                 if (is_array($var) && count($var)) {
  22.                         foreach ($var as $key => $key_var) {
  23.                                 $this->set_block($key , $key_var);
  24.                         } } else $this->block_data[$name] = $var;
  25.         }      
  26.         function load_template($tpl_name) {
  27.         $time_before = $this->get_real_time();
  28.                 if ($tpl_name == '' || !file_exists($this->dir . DIRECTORY_SEPARATOR . $tpl_name)) { die ("Невозможно загрузить шаблон: ". $tpl_name); return false;}
  29.                 $this->template = file_get_contents($this->dir . DIRECTORY_SEPARATOR . $tpl_name);
  30.                 if ( stristr( $this->template, "{include file=" ) ) {
  31.                         $this->template = preg_replace( "#\\{include file=['\"](.+?)['\"]\\}#ies","\$this->sub_load_template('\\1')", $this->template);
  32.                 }
  33.                 $this->copy_template = $this->template;
  34.         $this->template_parse_time += $this->get_real_time() - $time_before;
  35.         return true;
  36.         }
  37.         function sub_load_template($tpl_name) {
  38.                 $tpl_name = totranslit($tpl_name);
  39.                 if ($tpl_name == '' || !file_exists($this->dir . DIRECTORY_SEPARATOR . $tpl_name)) { die ("Невозможно загрузить шаблон: ". $tpl_name); return false;}
  40.                 $template = file_get_contents($this->dir . DIRECTORY_SEPARATOR . $tpl_name);
  41.                 return $template;
  42.         }
  43.         function _clear() {
  44.         $this->data = array();
  45.         $this->block_data = array();
  46.         $this->copy_template = $this->template;
  47.         }
  48.         function clear() {
  49.         $this->data = array();
  50.         $this->block_data = array();
  51.         $this->copy_template = null;
  52.         $this->template = null;
  53.         }
  54.         function global_clear() {
  55.         $this->data = array();
  56.         $this->block_data = array();
  57.         $this->result = array();
  58.         $this->copy_template = null;
  59.         $this->template = null;
  60.         }
  61.         function compile($tpl) {
  62.         $time_before = $this->get_real_time();
  63.         foreach ($this->data as $key_find => $key_replace) {
  64.                                 $find[] = $key_find;
  65.                                 $replace[] = $key_replace;
  66.                         }
  67.         $result = str_replace($find, $replace, $this->copy_template);
  68.         if (count($this->block_data)) {
  69.                 foreach ($this->block_data as $key_find => $key_replace) {
  70.                                 $find_preg[] = $key_find;
  71.                                 $replace_preg[] = $key_replace;
  72.                                 }
  73.  
  74.         $result = preg_replace($find_preg, $replace_preg, $result);
  75.         }
  76.         if (isset($this->result[$tpl])) $this->result[$tpl] .= $result; else $this->result[$tpl] = $result;
  77.         $this->_clear();
  78.         $this->template_parse_time += $this->get_real_time() - $time_before;
  79.         }
  80.         function get_real_time()
  81.         {
  82.                 list($seconds, $microSeconds) = explode(' ', microtime());
  83.                 return ((float)$seconds + (float)$microSeconds);
  84.         }
  85. }
  86. ?>

Шаблон:
CODE (html):
скопировать код в буфер обмена
  1. <!doctype html>
  2. <html lang="en" class="no-js">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta http-equiv="x-ua-compatible" content="ie=edge">
  6.     <meta name="viewport" content="width=device-width, initial-scale=1">
  7.     <title>{title} - Новости</title>
  8.     <link href="http://www.google-analytics.com/" rel="dns-prefetch"><!-- dns prefetch -->
  9.     <!-- meta -->
  10.     <!-- icons -->
  11.     <link href="{url_tpl}favicon.ico" rel="shortcut icon">
  12.     <!-- css + javascript -->
  13.     <link rel="stylesheet" href="{url_tpl}style.css" media="all">
  14.     <!--[if lt IE 9]>
  15.      <script type="text/javascript" src="js/html5shiv.js"></script>
  16.      <script type="text/javascript" src="js/selectivizr.js"></script>
  17.      <script type="text/javascript" src="js/respond.js"></script>
  18.    <![endif]-->
  19.     <script type="text/javascript" src="///cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.3/modernizr.min.js"></script>
  20. </head>
  21. <body>
  22. <!-- wrapper -->
  23. <div class="wrapper">
  24.   <header >
  25.       <div class="logo">
  26.         <img src="{url_tpl}img/logo.png" alt="" title="">
  27.       </div><!-- /logo -->
  28.       <div class="contact">
  29.         <p class="tel">
  30.             8(499)-390-90-99</br>
  31.             8(925)-390-90-99
  32.         </p>
  33.         <p class="mail">kovanii_dizain@mail.ru</p>
  34.       </div>
  35.       <nav class="nav" role="navigation">
  36.         <ul class="headnav">
  37.           <li><a class="active" href="{url}">Главная</a></li>
  38.           <li><a href="{url}?id=articles">Статьи</a></li>
  39.                   <li><a href="{url}?id=news">Новости</a></li>
  40.           <li><a href="{url}">Обратная связь</a></li>
  41.           <li><a href="{url}">Отзывы</a></li>
  42.           <li><a href="{url}?id=about">О компании</a></li>
  43.           <li><a href="{url}?id=contacts">Контактные данные</a></li>
  44.         </ul>
  45.         <input placeholder="Search..." type="text">
  46.       </nav><!-- /nav -->
  47.   </header><!-- /header -->
  48.   <section class="main_content">
  49.     <div class="leftside">
  50.       <h3>Категории изделий</h3>
  51.       <ul>
  52.         <li><a class="active" href="{url}">Главная</a> </li>
  53.         <li><a href="{url}?id=1">Лестницы<span>(0)</span></a></li>
  54.         <li><a href="{url}?id=2">Ограждения<span>(0)</span></a></li>
  55.         <li><a href="{url}?id=3">Балконы<span>(0)</span></a></li>
  56.         <li><a href="{url}?id=4">Изделия для сада<span>(0)</span></a></li>
  57.         <li><a href="{url}?id=5">Крыльцо и навесы<span>(0)</span></a></li>
  58.         <li><a href="{url}?id=6">Заборы, ворота и калитки<span>(0)</span></a></li>
  59.         <li><a href="{url}?id=7">Оконные решётки<span>(0)</span></a></li>
  60.         <li><a href="{url}?id=8">Ритуальные изделия<span>(3)</span></a></li>
  61.         <li><a href="{url}?id=9">Флюгеры<span>(0)</span></a></li>
  62.         <li><a href="{url}?id=10">Эксклюзивные изделия<span>(0)</span></a></li>
  63.         <li><a href="{url}?id=11">Интерьер<span>(8)</span></a></li>
  64.       </ul>
  65.     </div>
  66.     <div class="center_content">
  67.       <div class="bread">
  68.        <a href="{url}">Главная</a>      /       Новости
  69.       </div>
  70.       <h2>#{id} - {news1}</h2>
  71.           <p>{news2}</p>
  72.     </div>
  73.     <div class="rightside"><h3>Лучшие изделия</h3>
  74.       <ul><li>
  75.                         {lr}
  76.         </li></ul></div>            <div class="rightside"><h3>Блок 2</h3>
  77.                 <ul><li>
  78.                         >>В разработке!<<
  79.         </li></ul></div>                            <div class="rightside"><h3>Статистика</h3>
  80.                 <ul><li>
  81.                         Количество новостей: {num_rows1}                        Всего работ: ---                        Лучших работ: {num_rows2}
  82.                 </li></ul></div>  </section><!-- /section -->
  83. <footer role="contentinfo">
  84.   <div class="inner">
  85. <span>Design by A320_Pilot</span>
  86.     <p class="copyright">
  87.       © Copyright  ООО Кованый дизайн 2016. All Right Reserved.
  88.     </p><!-- /copyright -->
  89.   </div><!-- /.inner -->
  90. </footer><!-- /footer -->
  91. </div><!-- /wrapper -->
  92.     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
  93.     <script>window.jQuery || document.write('<script src="js/jquery.js"><\/script>')</script>
  94.     <script type="text/javascript" src="js/scripts.js"></script>
  95. </body>
  96. </html>
 
 Top
3d_killer
Отправлено: 25 Марта, 2016 - 14:17:43
Post Id



Участник


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


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




то есть в цикле одному и тому же имени, то есть пустому задаете разные значения $tpl->set('', $news);
в итоге получаете последнее
 
My status
 Top
A320_Pilot
Отправлено: 25 Марта, 2016 - 14:25:14
Post Id



Гость


Покинул форум
Сообщений всего: 70
Дата рег-ции: Сент. 2012  
Откуда: Россия, Москва


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




3d_killer пишет:
то есть в цикле одному и тому же имени, то есть пустому задаете разные значения $tpl->set('', $news);
в итоге получаете последнее

А как правильно надо,
Можете написать пожалуйста
 
 Top
3d_killer
Отправлено: 25 Марта, 2016 - 14:33:36
Post Id



Участник


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


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




ну если взглянуть на шаблонизатор бегло, то он не умеет выводить в цикле
(Добавление)
то есть ему нельзя кидать массивы, это что то самописное из уроков типо... пример простого шаблонизатора....
 
My status
 Top
A320_Pilot
Отправлено: 25 Марта, 2016 - 14:36:23
Post Id



Гость


Покинул форум
Сообщений всего: 70
Дата рег-ции: Сент. 2012  
Откуда: Россия, Москва


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




3d_killer пишет:
ну если взглянуть на шаблонизатор бегло, то он не умеет выводить в цикле
(Добавление)
то есть ему нельзя кидать массивы, это что то самописное из уроков типо... пример простого шаблонизатора....

Если честно этот шаблонизатор от dle
 
 Top
3d_killer
Отправлено: 25 Марта, 2016 - 14:37:09
Post Id



Участник


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


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




на самом деле этот вопрос у вас должен был всплыть еще тут
PHP:
скопировать код в буфер обмена
  1.  
  2. <li><a class="active" href="{url}">Главная</a></li>
  3.           <li><a href="{url}?id=articles">Статьи</a></li>
  4.                   <li><a href="{url}?id=news">Новости</a></li>
  5.           <li><a href="{url}">Обратная связь</a></li>
  6.           <li><a href="{url}">Отзывы</a></li>
  7.           <li><a href="{url}?id=about">О компании</a></li>
  8.           <li><a href="{url}?id=contacts">Контактные данные</a></li>
  9.  
 
My status
 Top
A320_Pilot
Отправлено: 25 Марта, 2016 - 14:38:11
Post Id



Гость


Покинул форум
Сообщений всего: 70
Дата рег-ции: Сент. 2012  
Откуда: Россия, Москва


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




3d_killer пишет:
на самом деле этот вопрос у вас должен был всплыть еще тут
PHP:
скопировать код в буфер обмена
  1.  
  2. <li><a class="active" href="{url}">Главная</a></li>
  3.           <li><a href="{url}?id=articles">Статьи</a></li>
  4.                   <li><a href="{url}?id=news">Новости</a></li>
  5.           <li><a href="{url}">Обратная связь</a></li>
  6.           <li><a href="{url}">Отзывы</a></li>
  7.           <li><a href="{url}?id=about">О компании</a></li>
  8.           <li><a href="{url}?id=contacts">Контактные данные</a></li>
  9.  

С этим всё нормально
 
 Top
3d_killer
Отправлено: 25 Марта, 2016 - 14:58:05
Post Id



Участник


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


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




что вот так вручную вы пишите какие пункты будут? и это нормально? а зачем тогда шаблонизатор? пишите в без него, меньше будет вопросов
(Добавление)
чем ваша запись
PHP:
скопировать код в буфер обмена
  1. <li><a href="{url}?id=about">О компании</a></li>

проще тогда вот этой?
PHP:
скопировать код в буфер обмена
  1. <li><a href="<?=url;?>?id=about">О компании</a></li>
 
My status
 Top
A320_Pilot
Отправлено: 25 Марта, 2016 - 15:03:06
Post Id



Гость


Покинул форум
Сообщений всего: 70
Дата рег-ции: Сент. 2012  
Откуда: Россия, Москва


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




3d_killer пишет:
что вот так вручную вы пишите какие пункты будут? и это нормально? а зачем тогда шаблонизатор? пишите в без него, меньше будет вопросов
(Добавление)
чем ваша запись
PHP:
скопировать код в буфер обмена
  1. <li><a href="{url}?id=about">О компании</a></li>

проще тогда вот этой?
PHP:
скопировать код в буфер обмена
  1. <li><a href="<?=url;?>?id=about">О компании</a></li>

Мне в основном нужны были теги в хтмл типа {title}
И всё, больше ничего не надо было!
 
 Top
3d_killer
Отправлено: 25 Марта, 2016 - 15:04:11
Post Id



Участник


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


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




где у вас в шаблоне цикл типо:
PHP:
скопировать код в буфер обмена
  1. <? foreach($news as $value):?>
  2.     <a><?=$value['name']; ?></a><br>
  3. <? endforeach;?>
 
My status
 Top
A320_Pilot
Отправлено: 25 Марта, 2016 - 15:05:28
Post Id



Гость


Покинул форум
Сообщений всего: 70
Дата рег-ции: Сент. 2012  
Откуда: Россия, Москва


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




3d_killer пишет:
где у вас в шаблоне цикл типо:
PHP:
скопировать код в буфер обмена
  1. <? foreach($news as $value):?>
  2.     <a><?=$value['name']; ?></a><br>
  3. <? endforeach;?>

Не понял
 
 Top
3d_killer
Отправлено: 25 Марта, 2016 - 15:05:55
Post Id



Участник


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


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




для этого не нужен шаблонизатор
 
My status
 Top
A320_Pilot
Отправлено: 25 Марта, 2016 - 15:06:35
Post Id



Гость


Покинул форум
Сообщений всего: 70
Дата рег-ции: Сент. 2012  
Откуда: Россия, Москва


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




3d_killer пишет:
для этого не нужен шаблонизатор

А как тогда быть с тегами типа {...}???
 
 Top
3d_killer
Отправлено: 25 Марта, 2016 - 15:40:42
Post Id



Участник


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


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




ну вы же их сами поставили, вопрос не понятен
(Добавление)
вот у шаблонизатора смарти синтаксис, те же foreach прописываются, в данном шаблонизаторе их нет он их не понимает и обрабатывать не будет, вы думали таким простеньким шаблонизатором все проблемы решить, смешно Улыбка
PHP:
скопировать код в буфер обмена
  1.  
  2. {foreach $arrayvar as $itemvar}
  3. 2.
  4. ..действие..
  5. 3.
  6. {/foreach}
  7. 4.
  8. {foreach $arrayvar as $keyvar=>$itemvar}
  9. 5.
  10. ..действие..
  11. 6.
  12. {/foreach}
  13.  
 
My status
 Top
Страниц (5): « 1 [2] 3 4 5 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB