За последние 24 часа нас посетили 17962 программиста и 1719 роботов. Сейчас ищут 985 программистов ...

модули и блоки

Тема в разделе "PHP для новичков", создана пользователем ridvik, 7 июл 2012.

  1. ridvik

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

    С нами с:
    7 июл 2012
    Сообщения:
    64
    Симпатии:
    0
    Всем добрый вечер. Собственно интересует такой вопрос. Есть шаблон вида:
    [​IMG]
    так вот как сделать так что бы при переходе вида: http://localhost/index.php?module=news
    там где отмечено {module} выводился код модуля и собственно где написано {blocks} там выводились блоки... я прочитал очень много информации на сайтах но везде написано по разному и так не чего не понял... возможно вопрос стоит не корректно... то есть модульность я организовал, а вот как теперь выводить это все в шаблон... шаблонизатор у меня smarty... читал про буферизацию, но все равно немного не допонял, так сказать пока что лично не объяснят не поймешь))

    P.S. блоки то еще можно проинклюдить а вот с модулями действительно беда)) выручайте люди добрые 4 день уже мучаюсь))
     
  2. не совсем понимаю в чём проблема...
    на странице делай четыре <div> на css позиционируюй их в нужном месте...
    в каждый див инклюд нужный шаблон.
     
  3. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    По идее, в шаблонизаторе должен быть метод для того чтобы подставить вместо переменной шаблона какое-то значение. В Смарти, вроде, называется assign, но могу ошибаться - Смарти не пользуюсь.
     
  4. ridvik

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

    С нами с:
    7 июл 2012
    Сообщения:
    64
    Симпатии:
    0
    вы не поняли суть вопроса... вот как реализовать... то бишь у нас есть файл modules/news/index.php - модуль, в шаблоне в нужном месте когда мы переходим по /index.php?module=news у нас где на картинке написан {$module} должен вывестись модуль... то бишь мы это как то реализовываем в ядре и там уже например делаем $smarty->assign('modules', $modules); $modules в данный момент текущий модуль... то бишь вот как такую шнягу сделать.... то есть блоки и от модуля чем отличаются( в моем понятие), блоков может быть хоть сколько, а модуль 1 на одной странице... я не хочу делать для каждого модуля свой шабл, то есть я так делать буду если мне это по реализации надо( то есть например для модуля новости)...
     
  5. ALEXU

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

    С нами с:
    5 апр 2011
    Сообщения:
    79
    Симпатии:
    0
    Адрес:
    Russia
    к примеру
    Код (Text):
    1. if ($_GET['module'] == 'news')
    2. {
    3.    // или делать инклуд, например include(MOD_DIR.'/'.$_GET['module'].'php');
    4.  
    5.    $newsContent = 'Модуль новостей';
    6.    $smarty->assign('module', $newsContent);
    7. }
    8. elseif ($_GET['module'] == 'articles')
    9. {
    10.    $articlesContent = 'Модуль статей';
    11.    $smarty->assign('module', $articlesContent);
    12. }
    13. else
    14. {
    15.    $indexContent = 'Главная';
    16.    $smarty->assign('module', $indexContent);
    17. }
    18.  
    19. $smarty->display(системный_путь_к_папке_шаблона.'index.html');
    Т.е. при открытии какого-то модуля, вся его инфа должна отдаваться в module.

    А в главном файле шаблона(сделал его index.html), где должны выводить свой контент модули, уже вставить переменную {$module}

    Это как один из вариантов.
    Если я конечно правильно понял, что нужно.
     
  6. ridvik

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

    С нами с:
    7 июл 2012
    Сообщения:
    64
    Симпатии:
    0
    а вот вместо $articlesContent = 'Модуль статей'; и $newsContent = 'Модуль новостей'; как сделать код данных модулей, то бишь $articlesContent = include "адрес модуля"; так работать будет??
     
  7. ALEXU

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

    С нами с:
    5 апр 2011
    Сообщения:
    79
    Симпатии:
    0
    Адрес:
    Russia
    Немного сложнее все.

    Первое
    include(адрес модуля);

    Второе.
    Нужно(можно) еще использовать fetch() для создания отдельных файлов шаблонов для модулей.
    Если у вас там будут статьи, то они же будут массивом. Так этот массив разбирать в файле шаблона модуля, например articles.html
    А в $smarty->assign('module', $smarty->fetch(путь до файла articles.html);
     
  8. ridvik

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

    С нами с:
    7 июл 2012
    Сообщения:
    64
    Симпатии:
    0
    хм... сейчас попробую =)

    Добавлено спустя 38 минут 53 секунды:
    [​IMG]

    вот так вот получается=(( может мне вместо смарти пока какой-нить другой шаблонизатор попробовать?? например какой-нить самописный...
    P.S. это когда проходишь по адресу /index.php?module=news
     
  9. ALEXU

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

    С нами с:
    5 апр 2011
    Сообщения:
    79
    Симпатии:
    0
    Адрес:
    Russia
    у вас там видимо что-то выводится через echo ? Или разместили {$module} не там?
    Шаблонизаторы примерно все одинаковые. Т.е. суть у них одна.

    В архиве smarty есть примеры готовые. Да и мануалов полно как вывод делать.
     
  10. ridvik

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

    С нами с:
    7 июл 2012
    Сообщения:
    64
    Симпатии:
    0
    1) вот ваш код, который вы мне дали:
    Код (Text):
    1. if ($_GET['module'] == 'news')
    2. {
    3.    // или делать инклуд, например include(MOD_DIR.'/'.$_GET['module'].'php');  
    4.  
    5.    $newsContent = include("modules/{$_GET['module']}/index.php");
    6.    $smarty->assign('module',$newsContent);
    7. }
    8. elseif ($_GET['module'] == 'test')
    9. {
    10.    $articlesContent = 'Модуль статей';
    11.    $smarty->assign('module', $articlesContent);
    12. }
    13. else
    14. {
    15.    $indexContent = 'Главная';
    16.    $smarty->assign('module', $indexContent);
    17. }
    18.  
    19. $smarty->display('site/index.tpl');
    2) если переходить по ссылке news то выходит такая бредятина, если переходить по ссылке test то все пучком
    [​IMG]
     
  11. ALEXU

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

    С нами с:
    5 апр 2011
    Сообщения:
    79
    Симпатии:
    0
    Адрес:
    Russia
    Код (Text):
    1. include("modules/{$_GET['module']}/index.php")
    2. $smarty->assign('module',$newsContent);
    а в файле modules/news/index.php
    уже делать
    $newsContent = 'Мод новостей';


    А test срабатывает правильно.
     
  12. ridvik

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

    С нами с:
    7 июл 2012
    Сообщения:
    64
    Симпатии:
    0
    Да, так работает, но как же быть, если мне например надо вывести вот такой вот код...
    Код (Text):
    1.  
    2. <?php
    3. global $main;
    4. $result = $main->db->sql_query("SELECT * FROM ".USERS);
    5. echo "<table width='100%'>";
    6. echo "<tr><td><center>Тест</center></td></tr>".
    7. "<tr>".
    8.                 "<td width='50'>".
    9.                 "<select  name='team1' onchange='showOption(this)'>";
    10.                 while($r=$main->db->sql_fetchrow($result))
    11.                     {
    12.                     echo "<option value='{$r['uid']},{$r['user_id']}'>{$r['user_name']}</option>";
    13.                     }
    14.                     echo "</select></td>";
    15.  
    16.  
    17.  
    18. echo "</table>";
    19. echo "
    20. <script type='text/javascript'>
    21. function test2() {
    22. alert('Hello world');
    23. }
    24. </srcipt>";
    25. echo "<a href='#' onclick='test2()'>буль</a>";
    26. ?>
    27. <script type="text/javascript">
    28. function dobroe () {
    29. alert("Добрый день <?={$r['user_name']}?>");
    30. }
    31.  
    32. </script>
    33. <a href="/index.php?module=teams" onclick="dobroe()">ЫЫЫ</a>
    34. <html>
    35.  
    36. <script>
    37. function test()
    38. {
    39.  alert("Добрый день <?{$r['user_name']}?>");
    40. }
    41. </script>
    42.  
    43. <body>
    44. <select id="d1" onchange="test();">
    45.  <option value="#">1</option>
    46.  <option value="#">2</option>
    47. </select>
    48.  
    49. </body>
    50. </html>
    51.  
    52. <script type="text/javascript">
    53.   function showOption(el)
    54.   {
    55.     var player = 'Игроку';
    56.     var add = 'отправлена заявка';
    57.     var ve = (',',el.options[el.selectedIndex].value);
    58.     var ve = ve.split(',');
    59.     alert(player+' '+ve[1]+' '+add);
    60.   }
    61. </script>
    62.  
    63. <select onchange="showOption(this)">
    64.   <option value="ay">ya</option>
    65.   <option value="by">yb</option>
    66.   <option value="ce">ec</option>
    67.   <option value="di">id</option>
    68. </select>
    69.  
    70.  
    71. <?php
    72. ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    73. ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    74. ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    75. ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    76. ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    77. ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    78. ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    79. ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    80. ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    81. open();
    82. echo "<center>Время</center>";
    83. close();
    84. ?>
    85. <?php
    86. //////////////////////////
    87. //author:blackwolfinsane//
    88. //www.sallatt.ru        //
    89. //////////////////////////
    90. function taim (){
    91. $sql=mysql_query
    92. ("SELECT * FROM kasseler_test WHERE id=1;");
    93. $row = mysql_fetch_array($sql);
    94. $date=$row['time'];
    95.  
    96.  
    97. $now = strtotime("now");
    98. $newyear = strtotime("$date");
    99.  
    100. $timeU = $newyear - $now;
    101.  
    102.  
    103. /////////минуты часы и дни  в секундах:
    104. $min = 60;
    105. $hour = 60 * 60;
    106. $day = 60 * 60 * 24;
    107.  
    108.  
    109.     $r_days = floor ($timeU / $day);
    110.     $r_hours = floor (($timeU - ($r_days * $day))/$hour);
    111.     $r_min = floor (($timeU - ($r_days * $day) - ($r_hours * $hour))/$min);
    112.     $r_sec = (($timeU - ($r_days * $day) - ($r_hours * $hour) - ($r_min * $min)));
    113.  
    114.  open();
    115. echo $r_days." Дней ";
    116.  
    117. echo $r_hours." Часов ";
    118.  
    119. echo $r_min." Минут ";
    120.  
    121. echo $r_sec." Секунд";
    122.  
    123. echo "<br />";
    124. close();
    125. }
    126. echo taim();
    127. ?>
    128.  
    129. <?php
    130. $sql=mysql_query
    131. ("SELECT * FROM kasseler_test WHERE id=1;");
    132. $row = mysql_fetch_array($sql);
    133. $date=$row['time'];
    134. open();
    135. echo $date;
    136. close();
    137. ?>
    138.  
    139. <script type="text/javascript">
    140. var e = SetTimeout('taim()',1000);
    141.  
    142. $(document).ready(function() {
    143.   var timer = setInterval(function() {
    144.        $.get('index.php?taim', {}, function(e){
    145.              alert(e); // Только вместо alert(e) нужно как-то тебе выделить элемент страницы-виновник торжества и убрать слеши комментов у нижеследующей строки
    146.               $('#timeoclock').html(e);
    147.        }
    148.    }, 2000);
    149. });
    150. </script>
    151.  
    152. <?php
    153. open();
    154. echo    "<table>".
    155.             "<tr>".
    156.                 "<td style='width:34px' align='center'>Игра</td>".
    157.                 "<td style='width:165px' align='center'>Команды</td>".
    158.                 "<td style='width:100px' align='center'>Карта</td>".
    159.                 "<td style='width:100px' align='center'>Время</td>".
    160.                 "<td style='width:180px' align='center'>Колличество игроков</td>".
    161.                 "<td style='width:34px' align='center'>Счет</td>".
    162.             "</tr>".
    163.         "</table>";
    164. close();
    165. ?>
    166. <?php
    167. $result = $main->db->sql_query("SELECT * FROM `kasseler_wars` ORDER BY `date_time` DESC LIMIT 40");
    168. for ($i = 0; $i < mysql_num_rows($result); $i++) {
    169. $row = $main->db->sql_fetchrow($result);
    170. $row['date_time']=str_replace(":","-",$row['date_time']);
    171. $time = date("Y-m-d", $row['date_time']);
    172. $game = '<img src="".$link."/images/games/css.gif" border="0" widht="14" height="14" align="absmiddle">';
    173. $link = 'http://localhost/';
    174.  
    175. if($row['teamsize'] == 3) {
    176.            $teamsize = '<b><font color="#CC0000">3</font> на <font color="#0379E7">3</font></b>';
    177. }elseif($row['teamsize'] == 4) {
    178.            $teamsize1 = '<b><font color="#CC0000">4</font> на <font color="#0379E7">4</font></b>';
    179. }else($row['teamsize'] == 5);{
    180.            $teamsize = '<b><font color="#CC0000">5</font> на <font color="#0379E7">5</font></b>';
    181.     }
    182.  
    183. if($row['score_t1'] > $row['score_t2']) {
    184.            $score_t1 = '<b><font color="#009900">'.$row['score_t1'].'</font></b>';
    185.            $score_t2 = '<b><font color="#fd0101">'.$row['score_t2'].'</font></b>';
    186.         }elseif($row['score_t1'] < $row['score_t2']) {
    187.            $score_t1 = '<b><font color="#fd0101">'.$row['score_t1'].'</font></b>';
    188.            $score_t2 = '<b><font color="#009900">'.$row['score_t2'].'</font></b>';
    189.         }else{
    190.            $score_t1 = '<b><font color="#FF6600">'.$row['score_t1'].'</font></b>';
    191.            $score_t2 = '<b><font color="#FF6600">'.$row['score_t2'].'</font></b>';
    192.     }
    193.      
    194.     if($row['score_t1'] > $row['score_t2']) {
    195.            $score_t1 = '<b><font color="#009900">'.$row['score_t1'].'</font></b>';
    196.            $score_t2 = '<b><font color="#fd0101">'.$row['score_t2'].'</font></b>';
    197.         }elseif($row['score_t1'] < $row['score_t2']) {
    198.            $score_t1 = '<b><font color="#fd0101">'.$row['score_t1'].'</font></b>';
    199.            $score_t2 = '<b><font color="#009900">'.$row['score_t2'].'</font></b>';
    200.         }else{
    201.            $score_t1 = '<b><font color="#FF6600">'.$row['score_t1'].'</font></b>';
    202.            $score_t2 = '<b><font color="#FF6600">'.$row['score_t2'].'</font></b>';
    203.     }
    204.    
    205. $pic_map = '<img src="/img/maps/'.$row['map'].'.jpg" width="120px" align="absmiddle"><br>';
    206.  
    207. open();
    208. echo "  <table>
    209.             <tr>   
    210.                 <td style='width:34px' align='center'></td>
    211.                 <td style='width:165px' align='center'>$row[name_team1] VS. $row[name_team2]</td>
    212.                 <td style='width:100px' align='center'>$row[map]</td>
    213.                 <td style='width:100px' align='center'>$time</td>
    214.                 <td style='width:180px' align='center'>$teamsize</td>
    215.                 <td style='width:34px' align='center'>$score_t1 : $score_t2</td>
    216.             </tr>
    217.         </table>";
    218. close();       
    219. /*$filesize=filesize('/localhost/warmod/'.$row['map'].'_'.$time.'.dem');
    220.  if($filesize >= 1048576 && $filesize < 1073741824)
    221.    {
    222.    $sizename = "MB <img src='images/cup/success.png' width='12' height='12' alt='success' align='absmiddle' />";
    223.    $size = (round($filesize / 1048576 * 100) / 100);
    224.    }
    225.  elseif($filesize >= 1024 && $filesize < 1048576)
    226.    {
    227.    $sizename = "KB <img src='images/cup/success.png' width='12' height='12' alt='success' align='absmiddle' />";
    228.    $size = (round($filesize / 1024 * 100) / 100);
    229.    }
    230.  else
    231.    {
    232.    $sizename = "Byte <img src='images/cup/success.png' width='12' height='12' alt='success' align='absmiddle' />";
    233.    $size = $filesize;
    234.    }
    235.  
    236.  
    237. if (file_exists('/localhost/warmod/'.$row['map'].'_'.$time.'.dem')) {
    238.     $size = $size;
    239.     $nofile = "Размер файла $size $sizename";
    240. } else {
    241.     $size = "Удалено <img src='images/cup/error.png' width='12' height='12' alt='удалено' align='absmiddle' />";
    242.     $sizename = "";
    243.     $nofile = 'Демо удалено, приносим свои извинения за предоставленые неудобства';
    244. }
    245.    
    246.  if (file_exists('/localhost/warmod/'.$row['map'].'_'.$time.'.dem')) {
    247.     $file_exist = "Скачать демо</br> Размер $size $sizename $maps $pic_map";
    248. } else {
    249.     $file_exist = "Демо отсутствует $maps $pic_map ";
    250. }*/}
    251. ?>
    то есть работать не с отдельной частью а со всем модулем...
     
  13. ALEXU

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

    С нами с:
    5 апр 2011
    Сообщения:
    79
    Симпатии:
    0
    Адрес:
    Russia
    Использовать fetch() (выше давал пример) и создать файл шаблона модуля news.html и сунуть в него все JS скрипты и результат php передавать через assign в news.html.
    Это самый простой вариант, имхо.

    А еще проще - отказаться от шаблонизатора, если у вас модули с таким содержимым. Просто, чтобы не тратить время на внедрение smarty ;)


    Вот у вас там есть, к примеру
    Код (Text):
    1. echo "<table width='100%'>";
    echo выведет свое содержимое в верху страницы, так как оно не попадает в переменную {$module}
    Суть то в том, что все должно сходится в переменную {$module},
     
  14. ridvik

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

    С нами с:
    7 июл 2012
    Сообщения:
    64
    Симпатии:
    0
    опять же а как же тогда реализовано в кмс?? то есть я как хочу...
    1) вот у нас подключился и вывел модуль
    2) если в модуле указаны данные через что выводить, тогда выводить. а если нет тупо выводить как страницу... это же можно же как то реализовать... без ООП..
     
  15. ALEXU

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

    С нами с:
    5 апр 2011
    Сообщения:
    79
    Симпатии:
    0
    Адрес:
    Russia
    реализовано примерно так же как описал я.
    Т.е. весь результат PHP передается в шаблоны через smarty.
    а для всяких модулей уже создаются страницы шаблона, в которых обрабатывается результат переданный из PHP.
    Изучите просто работу smarty. в сети полно хороших примеров, да и на сайте smarty то же.
     
  16. ridvik

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

    С нами с:
    7 июл 2012
    Сообщения:
    64
    Симпатии:
    0
    читал все читал... возможно знаний просто не хватает чтобы понять....
     
  17. ridvik

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

    С нами с:
    7 июл 2012
    Сообщения:
    64
    Симпатии:
    0
    всем спасибо за помощь, решил эту проблему довольно таки простым способом( для модулей)..
    Код (Text):
    1. if (isset($_REQUEST['module'])) {
    2.        
    3.    ob_start();
    4.    include ("modules/{$_REQUEST['module']}/index.php");
    5.    $contents .= ob_get_contents();
    6.    ob_end_clean();
    7.    $smarty->assign('module',$contents);
    8.        
    9. }
    10. $smarty->display('site/index.tpl');
     
  18. ridvik

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

    С нами с:
    7 июл 2012
    Сообщения:
    64
    Симпатии:
    0
    короч народ требуется помощь.... есть массив:
    Код (Text):
    1. $blocks = array (
    2.                     array('id' => '1',  'name' => 'test',   'view' => '0',  'blockfile' => 'test.php'),
    3.                     array('id' => '2',  'name' => 'test2',  'view' => '1',  'blockfile' => 'test2.php')
    4.  
    5. );
    надо вывести блоки где значение view не равно 0 то бишь view равен 1, как это сделать?? вывод делать в шаблон смарти.... вот как у меня сейчас:
    скрипт
    Код (Text):
    1. foreach ($blocks as $b){
    2.             if(file_exists("blocks/{$b['blockfile']}") AND !empty($b['blockfile']) AND $b['view']!=0){
    3.                     ob_start();
    4.                     require("blocks/{$b['blockfile']}");
    5.                     $content = ob_get_contents();
    6.                     ob_end_clean();
    7.                 $smarty->display('site/block.tpl');
    8.             $smarty->assign('block', $content);
    9.             $smarty->assign('tit', $b['name']);
    10.  
    11. } }
    это прописано в шаблоне
    {include file='site/block.tpl'}

    я понял что надо в шаблоне так же сделать цикл, но че то не доперло..
    P.S. документацию смарти читал и про секции и про foreach...