За последние 24 часа нас посетили 35005 программистов и 1756 роботов. Сейчас ищут 815 программистов ...

Помогите упростить шаблон

Тема в разделе "Прочие вопросы по PHP", создана пользователем Psih, 11 сен 2007.

  1. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Собственно сабж.

    Есть элемент массива, который надо вывести. Вот пример.
    PHP:
    1. <?php
    2. $array['actions'] = unserialize('a:14:{s:10:"2007-07-17";a:1:{i:0;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"2";}}s:10:"2007-07-16";a:3:{i:0;a:3:{s:8:"fme_code";s:5:"topic";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"1";}i:1;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"1";}i:2;a:3:{s:8:"fme_code";s:5:"topic";s:10:"fme_status";s:5:"moved";s:3:"cnt";s:1:"1";}}s:10:"2007-07-15";a:2:{i:0;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"2";}i:1;a:3:{s:8:"fme_code";s:5:"topic";s:10:"fme_status";s:5:"moved";s:3:"cnt";s:1:"1";}}s:10:"2007-07-14";a:3:{i:0;a:3:{s:8:"fme_code";s:5:"topic";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"1";}i:1;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:6:"edited";s:3:"cnt";s:1:"1";}i:2;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"2";}}s:10:"2007-07-13";a:3:{i:0;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:6:"edited";s:3:"cnt";s:1:"2";}i:1;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:2:"26";}i:2;a:3:{s:8:"fme_code";s:5:"topic";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"4";}}s:10:"2007-07-12";a:1:{i:0;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"2";}}s:10:"2007-07-11";a:2:{i:0;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"4";}i:1;a:3:{s:8:"fme_code";s:5:"topic";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"3";}}s:10:"2007-07-10";a:3:{i:0;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:6:"edited";s:3:"cnt";s:1:"1";}i:1;a:3:{s:8:"fme_code";s:5:"topic";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"1";}i:2;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"7";}}s:10:"2007-07-09";a:3:{i:0;a:3:{s:8:"fme_code";s:5:"topic";s:10:"fme_status";s:5:"moved";s:3:"cnt";s:1:"1";}i:1;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:6:"edited";s:3:"cnt";s:1:"2";}i:2;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"5";}}s:10:"2007-07-08";a:2:{i:0;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:6:"edited";s:3:"cnt";s:1:"1";}i:1;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"2";}}s:10:"2007-07-07";a:2:{i:0;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"1";}i:1;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:6:"edited";s:3:"cnt";s:1:"2";}}s:10:"2007-07-06";a:1:{i:0;a:3:{s:8:"fme_code";s:5:"topic";s:10:"fme_status";s:5:"moved";s:3:"cnt";s:1:"1";}}s:10:"2007-07-05";a:1:{i:0;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"9";}}s:10:"2007-07-04";a:2:{i:0;a:3:{s:8:"fme_code";s:3:"msg";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"3";}i:1;a:3:{s:8:"fme_code";s:5:"topic";s:10:"fme_status";s:7:"deleted";s:3:"cnt";s:1:"6";}}}';
    3.  
    4. echo '<pre>'.print_r($array, true).'</pre>';
    5.  
    и есть вот такой темплейт
    PHP:
    1.  
    2. <?if (isset($value['actions'])){?>
    3.     <? echo serialize($value['actions']) ?>
    4.     <br /><br /><span class="color4" style="font-weight: bold;"><?=_("Статистика модератора за прошедшую неделю")?></span><br /><br />
    5.     <?foreach ($value['actions'] as $key => $value){?>
    6.         <span style="font-weight: bold;"><?=$key?></span><br />
    7.         <div style="margin-left: 10px;">
    8.         <?foreach ($value as $row){
    9.             if ($row['fme_code'] == 'topic'){
    10.                 print ($row['fme_status'] == 'deleted' ? _("Тем удалено") : _("Тем перенесено")).': '.$row['cnt'].'<br />';
    11.             }else{
    12.                 print ($row['fme_status'] == 'deleted' ? _("Cообщений удалено") : _("Сообщений отредактировано")).': '.$row['cnt'].'<br />';
    13.             }
    14.         }?>
    15.         </div>
    16.     <?}
    17. }else{?>
    18.     <br /><br /><span class="color3" style="font-weight: bold;"><?=_("За прошедшую неделю модератор активен небыл")?></span>
    19. <?}?>
    20.  
    Есть идеи как можно более просто сделать это? Это информация для одного юзера, юзеров много, поэтому это крутиться внутри ещё одного foreach
     
  2. MrDarkness

    MrDarkness Активный пользователь

    С нами с:
    12 сен 2007
    Сообщения:
    3
    Симпатии:
    0
    Мне кажется лучше делать не так!
    1 . Делаешь темплейт в видк html страницы в котором вместо динамических данных ставишь
    какие то теги типа {main}, {left}
    2 . Пишишь код который будет из данного темплейта удалять заданные тобой теги и вставлять твои данные.
    Лучше сделать это при помощи регулярных выражений.
    При этом упрощается разработка темплейтов и их сменность. Возрастает гибкость твоего кода
     
  3. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    подозреваю, что под словами "упростить" он подразумевал "ускорить" :)
     
  4. MrDarkness

    MrDarkness Активный пользователь

    С нами с:
    12 сен 2007
    Сообщения:
    3
    Симпатии:
    0
    упростить и ускорить вообщето не синоним! Ладно подаждем пока сам автор ответи! По поводу скорости да его код быстрее! но намного ли и стоит он ли этого! (его сложности)
     
  5. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    1). Это и есть шаблон. Я не использую псевдо-шаблонизаторы, а прямой PHP код в шаблонах.
    Под упростить я иммел ввиду то, что у меня получаеться 3 вложенных foreach, хотелось бы обойтись двумя, что само по себе ускорит темплейт.
    Сложность темплейта - уважаемый, вы вглядитесь в то, какой у меня масив, вывести его у меня по другому не получаеться.
     
  6. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    ну так преобразуй массив в более человеческую форму.
     
  7. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    dark-demon
    И как ты предлагаешь мне выводить данные так, как это требуеться в шаблоне? :)
    [​IMG]
     
  8. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    Код (Text):
    1. например:
    2. array(
    3.     '2007-09-11' => array(
    4.         'topic_del' => 1,http://php.ru/forum/posting.php?mode=reply&t=7585
    5. Ответить на тему
    6.         'mess_edit' => 1,
    7.         'mess_del' => 2
    8.     ),
    9. ....
    10. )