Использование шаблонизатора

Аватара пользователя
SuBbI
Сообщения: 161
Зарегистрирован: 02 янв 2010
<?php foreach ($blocks_array as $block) { ?>
...................................................
<?php } ?>

не работает..........выводит только последние данные из бд,а не все какие есть
(тоесть вместо 3 блоков какие вбиты в бд,выводит 1 последний)

Аватара пользователя
Distructor
Администратор
Сообщения: 1631
Зарегистрирован: 28 дек 2009
а строку выбирающую данные в $blocks_array покажи

з.ы. и как эти вопросы относятся к использованию шаблонизатора ? О.о

Аватара пользователя
SuBbI
Сообщения: 161
Зарегистрирован: 02 янв 2010

Код: Выделить всё

<?php 
 include ("db_config.php");
 $result = mysql_query("SELECT * FROM monik",$db);
$myrow = mysql_fetch_array($result);
do
$names_array = array (     array('name'=> $myrow['name'] ),  );       
         
while($myrow = mysql_fetch_array($result)); 
 
 ?>

$names_array вместо $blocks_array

Аватара пользователя
Distructor
Администратор
Сообщения: 1631
Зарегистрирован: 28 дек 2009
строки надо извлекать в цикле, а так получается что ты только одну строку и получаешь из базы
почитай примеры в http://ru2.php.net/manual/en/function.m ... -array.php и http://ru2.php.net/manual/en/function.m ... -assoc.php
причем обрати внимание, что mysql_fetch_array без указания параметра MYSQL_ASSOC возвращает не именованный массив

Аватара пользователя
SuBbI
Сообщения: 161
Зарегистрирован: 02 янв 2010
Тебе полгода назад уже накидали кучу ссылок на инфу по работе с MySQL из PHP. Неужели за это время знаний в этом вопросе так и не прибавилось..?

честно говоря я так и не занималчя php ........
Distructor подскажи название тематики уроков по моим вопросам=)
{
1.вопрос,как в $ip = "ip "; и $port = "port"; вогнать автоматически данные из бд?
2.автоматический вывод блоков из бд уже с нужными тегами $teg,$teg2...., на местах
}

Аватара пользователя
Distructor
Администратор
Сообщения: 1631
Зарегистрирован: 28 дек 2009
SuBbI писал(а):1.вопрос,как в $ip = "ip "; и $port = "port"; вогнать автоматически данные из бд?
присвоить полученные из ответа MySQL

Код: Выделить всё

$myrow['ip']
не забыв перед этим прочитать примеры по ссылкам выше и подправить свой код

SuBbI писал(а):2.автоматический вывод блоков из бд уже с нужными тегами $teg,$teg2...., на местах
ничего не понял

Аватара пользователя
SuBbI
Сообщения: 161
Зарегистрирован: 02 янв 2010
ничего не понял

почемунельзя сделать проще?

Код: Выделить всё

<?php 
include ("db_config.php");
$result = mysql_query("SELECT * FROM monik",$db);
$myrow = mysql_fetch_array($result);
 ?>

потом:

Код: Выделить всё

{//содержание блока который надо выодить столько,сколько указано в бд
<table class="tborder" cellpadding="6" cellspacing="1" border="0" width="100%" align="center">
<tbody id="collapseobj_forumbit_1" style="">
$myrow['name'] : $myrow['ip] : $myrow['port']
  </tr>
  </tbody>
</table>}

как то так....

Аватара пользователя
Distructor
Администратор
Сообщения: 1631
Зарегистрирован: 28 дек 2009
последний раз пишу тебе код, причем я его на слолвах уже раза три повторил в теме

неужели сложно самому по указанной выше ссылке (http://ru2.php.net/manual/en/function.m ... -assoc.php) посмотреть пример

Код: Выделить всё

<?php

$conn 
= mysql_connect("localhost", "mysql_user", "mysql_password");

if (!$conn) {
    echo "Unable to connect to DB: " . mysql_error();
    exit;
}
  
if 
(!mysql_select_db("mydbname")) {
    echo "Unable to select mydbname: " . mysql_error();
    exit;
}

$sql = "SELECT id as userid, fullname, userstatus 
        FROM   sometable
        WHERE  userstatus = 1"
;

$result = mysql_query($sql);

if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}

// While a row of data exists, put that row in $row as an associative array
// Note: If you're expecting just one row, no need to use a loop
// Note: If you put extract($row); inside the following loop, you'll
//       then create $userid, $fullname, and $userstatus
while ($row = mysql_fetch_assoc($result)) {
    echo $row["userid"];
    echo $row["fullname"];
    echo $row["userstatus"];
}

mysql_free_result($result);

?>


и применить его к своей задаче

Код: Выделить всё

<?php  
  include 
("db_config.php"); 
  $result 
= mysql_query("SELECT * FROM monik",$db);

  if ($result && mysql_num_rows($result)> 0)  
  
{
     while ($myrow = mysql_fetch_assoc($result)) 
     
{
         echo '<table class="tborder" cellpadding="6" cellspacing="1" border="0" width="100%" align="center">'.
                '  <tbody id="collapseobj_forumbit_1"><tr><td>'. $myrow['name'] .' : '. $myrow['ip'] .' : '. $myrow['port'] .'</td></tr></tbody>'.
                '</table>';
     }
  }
  mysql_free_result($result);

?>

Аватара пользователя
SuBbI
Сообщения: 161
Зарегистрирован: 02 янв 2010
решил проблему более рационально,и кокраз в том направлении в котором хотел=)
1.создаем класс templates.php

Код: Выделить всё

<?php
   class template # создали класс
   { # зададим переменные
      var $data = array(); # переменная для шаблонов
      var $root = '.'; # каталог для шаблонов
      var $ext = '.tpl'; # расширение для шаблонов
      var $da_vr = array(); # переменная для преобразованых шаблонов

      function template($dir,$ext)
      {
         if(is_dir($dir)){$this -> root = $dir;}
         else{die('Ошибка! '.$dir.' - это не директория!');}
         $this -> ext = $ext;
      }
      function load($name)
      {
         $nn = $name;
         $dir = $this -> root;
         $ext = $this -> ext;
         $name = $dir.'/'.$name.$ext;
         if(!is_file($name)) {die('Ошибка <b>'.$name.'</b> - это не файл!');}
         $fp = fopen($name,'r');
         $data = fread($fp,filesize($name));
         fclose($fp);
         $this -> data[$nn] = $data;
         $this -> da_vr[$nm] = $data;
      }
      function vars($nm,$vars = array())
      {
         $data = $this -> data[$nm];
         while(list($id,$var) = each($vars))
         {
            global $$vars[$id];
            $data=str_replace('{'.$vars[$id].'}',$$vars[$id],$data);
         }
         $this -> da_vr[$nm] = $data;
      }
      function out($name) {
         $ret = $this -> da_vr[$name];
         $this -> da_vr[$name] = $this -> data[$name];
         return $ret;
      }
}
?>

2.создаем уже готовый блок body.tpl

Код: Выделить всё

<table class="tborder" cellpadding="6" cellspacing="1" border="0" width="100%" align="center">
  <tbody id="collapseobj_forumbit_1" style="">
    <tr align="center">
      <td class="alt2" width="40"></td>
      <td class="alt1Active" align="left" id="2"><div> <a href="" title=""><b><i> </i></b></a>  [color=#FF0000]{text} [/color] </div></td>
      <td class="alt2" nowrap="nowrap" width="250"><div class="smallfont" align="left">
        <div> <span style="white-space:nowrap"> <img class="inlineimg" src="http://localhost/websup/images/icons/icon1.gif" alt="" border="0" /> <a href="showthread.php?goto=newpost&amp;t=1" style="white-space:nowrap" title="К первому непрочитанному сообщению в теме 'Ntcnm'"><strong>Ntcnm</strong></a></span> </div>
        <div style="white-space:nowrap"> от <a href="member.php?find=lastposter&amp;f=2" rel="nofollow">Administrator</a> </div>
        <div align="right" style="white-space:nowrap"><img src="images/smoothred/buttons/top10.png" /><img src="images/smoothred/buttons/top10.png" /><img src="images/smoothred/buttons/top10.png" /><img src="images/smoothred/buttons/top10.png" /><img src="images/smoothred/buttons/top10.png" /><img src="images/smoothred/buttons/top10.png" /><img src="images/smoothred/buttons/top10.png" /><img src="images/smoothred/buttons/top10.png" /><img src="images/smoothred/buttons/top10.png" /><img src="images/smoothred/buttons/top10.png" /></div>
      </div></td>
    </tr>
  </tbody>
</table>

3.выводим body.tpl на главной

Код: Выделить всё

<?php
include ("template.php");
include ("db_config.php");
$result = mysql_query("SELECT * FROM monik",$db);
$myrow = mysql_fetch_array($result);
$text = 'coder.v-tanke.ru';
$tpl = new template('./css','.tpl'); # создали объект, задали каталог и расширение

$tpl -> load('body'); # зашрузили шаблон

$tpl -> vars('body',array('text','title','bgcolor')); # указали какие переменные преобразовать, они должны быть заданы зарание

echo $tpl -> out('body'); # вывели шаблон
?>

взято от http://www.php.su
ну и остается мне нубу решить вопрос
$text = 'coder.v-tanke.ru'; выводит текст,а как вывести таким образом инфу из бд...........
зы.проюзал кучу мануалов,но видимо пропустил нужное=(

Аватара пользователя
Distructor
Администратор
Сообщения: 1631
Зарегистрирован: 28 дек 2009
SuBbI писал(а):решил проблему более рационально,и кокраз в том направлении в котором хотел=)
ну во первых ты не решил, а нашел один из выложенных простых шаблонизаторов. Вот только к твоим целям он не подходит, т.к. не умеет выводить в шаблоне циклы. Так что либо дорабатывай его, либо используй написанное выше

Аватара пользователя
SuBbI
Сообщения: 161
Зарегистрирован: 02 янв 2010
а можно ли в echo' '; вставить php код?

Аватара пользователя
SLITE
Сообщения: 204
Зарегистрирован: 01 янв 2010
SuBbI писал(а):а можно ли в echo' '; вставить php код?

вставить можно но исполняться он не будет.

Аватара пользователя
Distructor
Администратор
Сообщения: 1631
Зарегистрирован: 28 дек 2009
SLITE писал(а):вставить можно но исполняться он не будет.
если только вставлять именно в echo, а не в eval (http://php.net/manual/en/function.eval.php или http://php.su/functions/?eval)

Код: Выделить всё

eval("echo \"This is some really fine output.\"");


Вернуться в «Вопросы по программированию»