|
|
|
| Вопрос состоит вот вчем.
Есть таблица с данными.три поля кпримеру. А1 В1 С1.
Теперь я с помощью класа хочу вывести данные так чтобы в самом классе небыло хтмл.
Темпл к примеру следующий.
<TABLE>
<TR>
<TD>{1}</TD>
<TD>{2}</TD>
<TD>{3}</TD>
</TR>
</TABLE>
Надеюсь принцип ясен.
Если мне нужно с бд вытащить одну запись не беда. Осуществимо спомощью str_replace.
Но если у меня более одной записи?
И я нехочу чтобы теги открытия тэбэла повторялись. Как это осуцествить, так чтобы не пришлось на заголовок таблицы и заголовки тиаров делать отдельные тэмпэлы.?
Примеры приветствуются.
Предсылки на смарти и прочее просьба не давать. | |
|
|
|
|
|
|
|
для: werd
(29.06.2009 в 06:34)
| | чел ты об клавиатуру руки не сломаешь, так что напиши побольше, а то вообще ничего не понятно, к примеру "Есть таблица с данными", какая таблица?? Таблицы бывают в базах данных, в хтмл, плэйн текст и т.д. Про какой класс идёт речь?? Если про тот что используется в ООП, то привели бы лучше код вашего класса, а не темплэйт…
Короче ставь конкретную проблему, а не кашу из хтмл тэмпэйтов и непонятного текста | |
|
|
|
|
|
|
|
для: nikita2206
(29.06.2009 в 12:48)
| | Писать с клавы телефона не тока руки поломаешь.
Так вот ещё раз. Ни какого класса еще нет. И темпла тоже. Еще ненаписал. Мне это ещё предстоит. Так вот есть допустим тэмпл с хтмл который я привел выше. Теперь я делаю select * from tbltralala
И запускаю цикл на вывод данных. Но если я применю просто реплэйс то получю лишь одну строку в таблице. А мне надо вывести все записи.
Допустим
$td1=msql[a1];
$td2=msql[b1];
$td3=msql[c1];
Сори за бардак.это я так прописал данные из бд.
Теперь делаю три реплейса на поля в темпеле.
Результатом будет таблица с одной строкой.
Но мне надо все записи вывести!
Поэтому мне надо получить много раз шаблон тиара таблицы и сделать реплейс.а уж затем получить темпл самого тебэла и сделать вставку всего прочего.
Я вижу решение всего этого способом двух темплов. Но такой вариант стрёмен. Так вот как.
Фух аж палец отваливается от всей писанины.
Народ неужели все докатились до того что сами ничего не пишут а лишь используют готовые скрипты. | |
|
|
|
|
 1.4 Кб |
|
|
для: werd
(29.06.2009 в 17:42)
| | см. в прикриплении, если чо — спрашуй | |
|
|
|
|
|
|
|
для: nikita2206
(29.06.2009 в 18:16)
| | Спасибо.прийду домой просмотрю . | |
|
|
|
|
|
|
|
для: nikita2206
(29.06.2009 в 18:16)
| | То что доктор прописал.
Тока щас ещё надо разобраться чё ты там понаписывал :-) | |
|
|
|
|
|
|
|
для: nikita2206
(29.06.2009 в 18:16)
| | почти то что надо
только теперь надо по ходу скрипт переделать что бы было много тиаров а не один. | |
|
|
|
|
|
|
|
для: nikita2206
(29.06.2009 в 18:16)
| | В конце сделал так
templ_creator.php
<?
class templ{
public $tr_found = 0;
public $replace;
public $tpl;
public $result;
private $top;
private $down;
private $constructor;
private $center;
public function __construct($tplDir,$tplFile){
$this->tplDir = $tplDir;
$this->tplFile = $tplFile;
}
public function set($value = NULL){
$this->replace[$this->tr_found] = $value;
$this->tr_found += 1;
}
public function Counstruct(){
$this->tpl = file_get_contents($this->tplDir.$this->tplFile.'.tpl');
preg_match_all('|(.+?){foreach}(.+?){/foreach}(.*)|s', $this->tpl, $cycles);
$this->top=$cycles[1][0];
$this->constructor=$cycles[2][0];
$this->down=$cycles[3][0];
$cycles = null;
preg_match_all('|({\$\d})|s', $this->constructor, $cycles);
$count = count($cycles[0]);
for($a=0;$a<$this->tr_found;$a++){
$shab =$this->constructor;
for($i = 0; $i < $count; $i++){
$shab = str_replace($cycles[0][$i], $this->replace[$a][$i] ,$shab);
}
$this->center .= $shab;
}
$this->result = $this->top.$this->center.$this->down;
return $this->result;
}
}
?>
|
question_list.php
<table title="Some text" width="100%" rules="rows">
<tr>
<td title="סטטוס" width="1%"></td>
<td title="Some text"><strong title="Some text">Some text</strong></td>
<td title="Some text" width="1%"></td>
<td title="Some text" width="2%"></td>
<td title="Some text" width="5%"><strong title="Some text">Some text</strong></td>
<td title="Some text" width="3%"><strong title="Some text">Some text</strong></td>
<td title="Some text" width="1%"><strong title="Some text">Some text</strong></td>
</tr>
{foreach}
<tr title="{$0}" style="border-bottom-style:1px solid;border-bottom-color: #99CCCC;">
<td><span class="{$1}" dir="ltr"></span></td>
<td nowrap="nowrap"><span onclick="javascript: window.location='?vio=1&act=view&id={$2}'" style="font-weight:bold;">{$3}</span></td>
<td><span class="star" dir="ltr"></span></td>
<td><span dir="ltr">{$4}</span></td>
<td><span>{$5}</span></td>
<td><span dir="ltr"><strong>{$6}</strong></span></td>
<td><span dir="ltr">{$7}</span></td>
</tr>
{/foreach}
</table>
<br />
|
<?
require_once 'templ_creator.php';
$templator = new templ('tample/vio/','question_list');
$templator->set(array(
$f[id_subj],
$pic_class,
$f[id],
mb_substr($f[id_subj],0,122),
$f[id_ball],
get_name($f[id_user]),
$f[id_answers],
gmdate(' H:i',$f[id_date]),
));
echo $templator->Counstruct();
?>
|
| |
|
|
|
|
|
|
|
для: werd
(29.06.2009 в 06:34)
| | Если шаблон на Smarty и прочих стандартных шаблонизаторах, то передаешь массив и в шаблоне в цикле обрабатываешь данные и выводишь их (проблемы быть не должно, инструкций куча). Если речь идет о собственном шаблоне (простом отделении HTML-кода), то самый верный выход - используй регулярные выражения и заменяй флаги данными из базы. | |
|
|
|
|
|
|
|
для: werd
(29.06.2009 в 06:34)
| | хм щас буду какраз себе делать подобную функцию, когда сделаю выложу | |
|
|
|
|
|
|
|
для: nikita2206
(29.06.2009 в 16:31)
| | Изобретать велосипед - это по нашему. А использовать то, что уже сделано и обкатано, это видимо не круто. Я про смарти. | |
|
|
|
|
|
|
|
для: GeorgeIV
(30.06.2009 в 10:57)
| | да нет, это всего лишь называется работать своими мозгами.
Я предпочитаю понимать каждую функцию в своём коде. Нежели лазить по мануалам других разработчиков | |
|
|
|
|
|
|
|
для: werd
(30.06.2009 в 14:54)
| | все это хорошо, когда балуешься со своей страничкой и неприемлемо в больших проектах | |
|
|
|
|
|
|
|
для: GeorgeIV
(30.06.2009 в 19:38)
| | Это да :-)
Большой проект другой разговор , даже 2 разработчика уже другое дело. Но я один. И за принцип взял сам все разработывать. | |
|
|
|
|
|
|
|
для: werd
(30.06.2009 в 14:54)
| | Правильно говоришь, я тоже предпочитаю разбираться в каждом кусочке своего кода. | |
|
|
|
|
|
|
|
для: Рома
(30.06.2009 в 22:21)
| | нас много | |
|
|
|
|
|
|
|
для: werd
(29.06.2009 в 06:34)
| |
<?php
$templateTable = <<<HTML
<table>{rows}</table>
HTML;
$templateRow = <<<HTML
<tr>
<td>{val1}</td>
<td>{val2}</td>
<td>{val3}</td>
</tr>
HTML;
$data = array (
array (1,2,3),
array (4,5,6),
array (7,8,9)
);
$sRows = "";
foreach ($data as $rowData) {
$sRow = $templateRow;
$sRow = str_replace ("{val1}", $rowData[0], $sRow);
$sRow = str_replace ("{val2}", $rowData[1], $sRow);
$sRow = str_replace ("{val3}", $rowData[2], $sRow);
$sRows .= $sRow;
}
$result = str_replace ("{rows}", $sRows, $templateTable);
?>
|
Суть проста: есть шаблон таблицы и шаблон строки (<tr>), складываем несколько обработанных шаблонов строки и вставляем в таблицу. | |
|
|
|
|
|
|
|
для: golovdinov
(30.06.2009 в 18:39)
| | Это имено то чего нехочу. | |
|
|
|
|
|
|
|
для: werd
(30.06.2009 в 20:46)
| | Этого не избежать, т.к. вышеприведенный принцип применяется абсолютно везде (Smarty, XSLT и т.д.). Если записей неограниченное количество, то по другому никак. Тем более, что недостатков в таком подходе минимум.
PS: п*здец у тебя грамматика с орфографией :) | |
|
|
|
|
|
|
|
для: golovdinov
(30.06.2009 в 21:24)
| | Да с телефона писать неудобно.
То есть двух шаблонов не исбежать? Фигово. Но всё же я попробую покрутить выше приведённый скрипт :-) всего то надо массив ещё один добавить или сделать его войнным. | |
|
|
|