Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: tpl логика и реализация.
 
 автор: werd   (29.06.2009 в 06:34)   письмо автору
 
 

Вопрос состоит вот вчем.
Есть таблица с данными.три поля кпримеру. А1 В1 С1.
Теперь я с помощью класа хочу вывести данные так чтобы в самом классе небыло хтмл.
Темпл к примеру следующий.
<TABLE>
<TR>
<TD>{1}</TD>
<TD>{2}</TD>
<TD>{3}</TD>
</TR>
</TABLE>

Надеюсь принцип ясен.
Если мне нужно с бд вытащить одну запись не беда. Осуществимо спомощью str_replace.
Но если у меня более одной записи?
И я нехочу чтобы теги открытия тэбэла повторялись. Как это осуцествить, так чтобы не пришлось на заголовок таблицы и заголовки тиаров делать отдельные тэмпэлы.?
Примеры приветствуются.
Предсылки на смарти и прочее просьба не давать.

  Ответить  
 
 автор: nikita2206   (29.06.2009 в 12:48)   письмо автору
 
   для: werd   (29.06.2009 в 06:34)
 

чел ты об клавиатуру руки не сломаешь, так что напиши побольше, а то вообще ничего не понятно, к примеру "Есть таблица с данными", какая таблица?? Таблицы бывают в базах данных, в хтмл, плэйн текст и т.д. Про какой класс идёт речь?? Если про тот что используется в ООП, то привели бы лучше код вашего класса, а не темплэйт…
Короче ставь конкретную проблему, а не кашу из хтмл тэмпэйтов и непонятного текста

  Ответить  
 
 автор: werd   (29.06.2009 в 17:42)   письмо автору
 
   для: nikita2206   (29.06.2009 в 12:48)
 

Писать с клавы телефона не тока руки поломаешь.
Так вот ещё раз. Ни какого класса еще нет. И темпла тоже. Еще ненаписал. Мне это ещё предстоит. Так вот есть допустим тэмпл с хтмл который я привел выше. Теперь я делаю select * from tbltralala
И запускаю цикл на вывод данных. Но если я применю просто реплэйс то получю лишь одну строку в таблице. А мне надо вывести все записи.
Допустим
$td1=msql[a1];
$td2=msql[b1];
$td3=msql[c1];
Сори за бардак.это я так прописал данные из бд.
Теперь делаю три реплейса на поля в темпеле.
Результатом будет таблица с одной строкой.
Но мне надо все записи вывести!
Поэтому мне надо получить много раз шаблон тиара таблицы и сделать реплейс.а уж затем получить темпл самого тебэла и сделать вставку всего прочего.
Я вижу решение всего этого способом двух темплов. Но такой вариант стрёмен. Так вот как.
Фух аж палец отваливается от всей писанины.
Народ неужели все докатились до того что сами ничего не пишут а лишь используют готовые скрипты.

  Ответить  
 
 автор: nikita2206   (29.06.2009 в 18:16)   письмо автору
1.4 Кб
 
   для: werd   (29.06.2009 в 17:42)
 

см. в прикриплении, если чо — спрашуй

  Ответить  
 
 автор: werd   (29.06.2009 в 18:57)   письмо автору
 
   для: nikita2206   (29.06.2009 в 18:16)
 

Спасибо.прийду домой просмотрю .

  Ответить  
 
 автор: werd   (30.06.2009 в 01:06)   письмо автору
 
   для: nikita2206   (29.06.2009 в 18:16)
 

То что доктор прописал.
Тока щас ещё надо разобраться чё ты там понаписывал :-)

  Ответить  
 
 автор: werd   (30.06.2009 в 01:41)   письмо автору
 
   для: nikita2206   (29.06.2009 в 18:16)
 

почти то что надо

только теперь надо по ходу скрипт переделать что бы было много тиаров а не один.

  Ответить  
 
 автор: werd   (01.07.2009 в 03:41)   письмо автору
 
   для: 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="&#1505;&#1496;&#1496;&#1493;&#1505;" 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&amp;act=view&amp;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();
?>

  Ответить  
 
 автор: Петр   (29.06.2009 в 14:54)   письмо автору
 
   для: werd   (29.06.2009 в 06:34)
 

Если шаблон на Smarty и прочих стандартных шаблонизаторах, то передаешь массив и в шаблоне в цикле обрабатываешь данные и выводишь их (проблемы быть не должно, инструкций куча). Если речь идет о собственном шаблоне (простом отделении HTML-кода), то самый верный выход - используй регулярные выражения и заменяй флаги данными из базы.

  Ответить  
 
 автор: nikita2206   (29.06.2009 в 16:31)   письмо автору
 
   для: werd   (29.06.2009 в 06:34)
 

хм щас буду какраз себе делать подобную функцию, когда сделаю выложу

  Ответить  
 
 автор: GeorgeIV   (30.06.2009 в 10:57)   письмо автору
 
   для: nikita2206   (29.06.2009 в 16:31)
 

Изобретать велосипед - это по нашему. А использовать то, что уже сделано и обкатано, это видимо не круто. Я про смарти.

  Ответить  
 
 автор: werd   (30.06.2009 в 14:54)   письмо автору
 
   для: GeorgeIV   (30.06.2009 в 10:57)
 

да нет, это всего лишь называется работать своими мозгами.

Я предпочитаю понимать каждую функцию в своём коде. Нежели лазить по мануалам других разработчиков

  Ответить  
 
 автор: GeorgeIV   (30.06.2009 в 19:38)   письмо автору
 
   для: werd   (30.06.2009 в 14:54)
 

все это хорошо, когда балуешься со своей страничкой и неприемлемо в больших проектах

  Ответить  
 
 автор: werd   (30.06.2009 в 20:43)   письмо автору
 
   для: GeorgeIV   (30.06.2009 в 19:38)
 

Это да :-)
Большой проект другой разговор , даже 2 разработчика уже другое дело. Но я один. И за принцип взял сам все разработывать.

  Ответить  
 
 автор: Рома   (30.06.2009 в 22:21)   письмо автору
 
   для: werd   (30.06.2009 в 14:54)
 

Правильно говоришь, я тоже предпочитаю разбираться в каждом кусочке своего кода.

  Ответить  
 
 автор: nikita2206   (01.07.2009 в 15:32)   письмо автору
 
   для: Рома   (30.06.2009 в 22:21)
 

нас много

  Ответить  
 
 автор: golovdinov   (30.06.2009 в 18:39)   письмо автору
 
   для: 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>), складываем несколько обработанных шаблонов строки и вставляем в таблицу.

  Ответить  
 
 автор: werd   (30.06.2009 в 20:46)   письмо автору
 
   для: golovdinov   (30.06.2009 в 18:39)
 

Это имено то чего нехочу.

  Ответить  
 
 автор: golovdinov   (30.06.2009 в 21:24)   письмо автору
 
   для: werd   (30.06.2009 в 20:46)
 

Этого не избежать, т.к. вышеприведенный принцип применяется абсолютно везде (Smarty, XSLT и т.д.). Если записей неограниченное количество, то по другому никак. Тем более, что недостатков в таком подходе минимум.

PS: п*здец у тебя грамматика с орфографией :)

  Ответить  
 
 автор: werd   (30.06.2009 в 22:24)   письмо автору
 
   для: golovdinov   (30.06.2009 в 21:24)
 

Да с телефона писать неудобно.
То есть двух шаблонов не исбежать? Фигово. Но всё же я попробую покрутить выше приведённый скрипт :-) всего то надо массив ещё один добавить или сделать его войнным.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования