[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: {name} - как это реализовать????
Shkiper
Привет всем!!! Встречал в инете вот такую запись {name}. Это(насколько я понял) такого рода контейнер(типа переменной) который может содержать любой код так вот как она назначаеться????



Спустя 2 минуты, 32 секунды (17.03.2012 - 22:00) inpost написал(а):
echo str_replace('{name}','text',$text);
Аналогично, если бы в коде сразу писал бы правильно: <?php echo $name; ?>

Спустя 6 минут, 14 секунд (17.03.2012 - 22:06) Shkiper написал(а):
А я видел там пишут например "Меня зовут {name}" это как сделать????

Спустя 16 минут, 59 секунд (17.03.2012 - 22:23) inpost написал(а):
Я тебе выше код дал. Что ещё надо?

Спустя 10 минут, 8 секунд (17.03.2012 - 22:33) redreem написал(а):
Deert

это называется "использовать шаблонизатор". их 100500 на разный вкус и цвет. поищи по запросу "простейший шаблонизатор php"... полюбому найдешь простую реализацию с примером.

Спустя 13 часов, 26 минут, 4 секунды (18.03.2012 - 11:59) Shkiper написал(а):
inpost ты мне дал не совсем то что я хотел.
redreem а что такое шаблонизатор????(гугл выдает слишклм замудренные ответы)

Спустя 1 час, 9 минут, 11 секунд (18.03.2012 - 13:09) sergeiss написал(а):
Цитата (Deert @ 18.03.2012 - 12:59)
гугл выдает слишклм замудренные ответы

Тогда спроси у Яндекса smile.gif Например, вот так: php шаблонизатор - запрос у Яндекса

И дальше только успевай читать то, что в ссылках получаешь.

Спустя 4 часа, 11 минут, 9 секунд (18.03.2012 - 17:20) Guest написал(а):
Кстати, было бы не плохо сделать шаблоны как в Википедии, с параметрами

Спустя 7 минут, 30 секунд (18.03.2012 - 17:27) inpost написал(а):
Deert
Я тебе дал то, что из себя представляет шаблонизатор. Давай я лучше код непонятный тебе скину, чтобы ты потом понял, что для тебя сложно и бросил это дело, или ещё хуже, молиться начал на шаблонизаторы, так как сам толком не понимаешь как они работают...

Спустя 21 час, 56 минут, 5 секунд (19.03.2012 - 15:23) Shkiper написал(а):
inpost - +1 biggrin.gif
Выучю шаблонизатор и все(если что к вам обрашюсь biggrin.gif)

Спустя 17 часов, 52 минуты, 17 секунд (20.03.2012 - 09:16) Гость_Володя Шишкин написал(а):
А что если просто:
<?
$name = 'Volodya';
$os = 'xp';
echo "
<html>
<head>
<title>Страница участника
{$name}</title>
</head>
<body>
Меня зовут
{$name} и я использую операционную систему {$os}
</body>
</html>
"
;

Спустя 42 минуты, 18 секунд (20.03.2012 - 09:58) Shkiper написал(а):
Цитата (Гость_Володя Шишкин @ 20.03.2012 - 06:16)
А что если просто:
<?
$name = 'Volodya';
$os = 'xp';
echo "
<html>
<head>
<title>Страница участника
{$name}</title>
</head>
<body>
Меня зовут
{$name} и я использую операционную систему {$os}
</body>
</html>
"
;

Обязательно протестирую!!!!

Спустя 22 минуты, 19 секунд (20.03.2012 - 10:20) sergeiss написал(а):
Цитата (Гость_Володя Шишкин @ 20.03.2012 - 10:16)
А что если просто:

Это верно полностью, да. Но только это не шаблонизатор, вобщем-то, а просто работа с текстовой строкой. Или совсем уж "простейший" шаблонизатор. Никаких условий тут нет и быть не может. То есть, например, нельзя исключить показ чего-нибудь при выполнении некоторых условий.

Спустя 48 минут, 12 секунд (20.03.2012 - 11:08) Игорь_Vasinsky написал(а):
В моём журнале есть примеры реализации, на подобии шаблонизатора, вместо str_REPLACE использовал strtr()

но щас понял - что эти движения мне не нужны, пишу так

<?=$name?>

Спустя 8 минут, 22 секунды (20.03.2012 - 11:17) Shkiper написал(а):
А что за журнал???

Спустя 2 минуты, 2 секунды (20.03.2012 - 11:19) caballero написал(а):
вы уж определитесь о каком шаблонизаторе речь активном или пассивном

Спустя 4 часа, 9 минут, 23 секунды (20.03.2012 - 15:28) Shkiper написал(а):
/Хех а чем различаються активный или пассивный????

Спустя 58 минут, 26 секунд (20.03.2012 - 16:27) m4a1fox написал(а):
С вероятностью 90% ты увидел это в шаблонизаторе smarty...

Спустя 4 часа, 20 минут, 37 секунд (20.03.2012 - 20:47) Shkiper написал(а):
Вот Гость Володя Шишкин продемонстрировал вот такой код:
<?
$name = 'Volodya';
$os = 'xp';
echo "
<html>
<head>
<title>Страница участника
{$name}</title>
</head>
<body>
Меня зовут
{$name} и я использую операционную систему {$os}
</body>
</html>
"
;


Там он писал вот так {$os} а как сделать {os} - я думаю можно просто использовать константу(define) можно ли там сделать????

Спустя 11 минут, 47 секунд (20.03.2012 - 20:59) Игорь_Vasinsky написал(а):
файл шаблона test.tpl

<h1>Hello? my name is {name}!</h1>
<p>
I loved {girlname}!</p>


файл контроллера controller.test.php

$name = 'Коля';
$girlname = 'Надя';

$tpl = file_get_contents('test.tpl');

$marks = array('{name}', '{girlname}');
$replacement = array($name, $girlname);

$parseTpl = strtr($marks, $replacement, $tpl);


файл модели test.php

include 'controller.test.php';

echo $parseTpl;


index.php

include 'test.php';

Спустя 53 минуты, 10 секунд (20.03.2012 - 21:52) Bodich написал(а):
Цитата (Игорь_Vasinsky @ 20.03.2012 - 08:08)
<?=$name?>

Вот вижу все так пишут <?=$name?> если написать <?$name?> тоже выведет это нужно или просто стиль такой ?

Спустя 12 минут, 41 секунда (20.03.2012 - 22:05) Игорь_Vasinsky написал(а):
Ну я же говорил, что раньше мудрил с таким шаблонизатором


Свернутый текст
файл шаблона test.tpl

<h1>Hello? my name is {name}!</h1>
<
p>I loved {girlname}!</p>


файл контроллера controller.test.php

$name = 'Коля';
$girlname = 'Надя';

$tpl = file_get_contents('test.tpl');

$marks = array('{name}', '{girlname}');
$replacement = array($name, $girlname);

$parseTpl = strtr($marks, $replacement, $tpl);


файл модели test.php

include 'controller.test.php';

echo $parseTpl;


index.php

include 'test.php';


Но дальше, с помощью других, пришло понимание того что это лишняя писанина и трата ресурсов, по этому сейчас я пользуюсь

<p><?=$text?></p>

<
ul>

<?php foreach($array as $line) :?>

<li><?=$line?></li>

<?php endforeach?>

</ul>


и этим не брезгаю.

Спустя 2 минуты, 37 секунд (20.03.2012 - 22:08) Игорь_Vasinsky написал(а):
Цитата
Вот вижу все так пишут <?=$name?> если написать <?$name?> тоже выведет это нужно или просто стиль такой ?


тока если такие теги не отключены в php.ini, и то

<? echo $name; ?>

Спустя 10 минут, 53 секунды (20.03.2012 - 22:18) Bodich написал(а):
ну счас шорт теги на всех приличных хостингах включены smile.gif

Спустя 5 часов, 46 минут, 13 секунд (21.03.2012 - 04:05) Игорь_Vasinsky написал(а):
Цитата
ну счас шорт теги на всех приличных хостингах включены


такие <?= ?>, но не такие <? ?>

Спустя 6 часов, 58 минут, 51 секунда (21.03.2012 - 11:03) Ramzil_Nixon написал(а):
Deert, Пиши лучше
<?php echo isset($name) ? $name : ''; ?>


И хлопот меньше и код короче :)

Спустя 5 минут, 15 секунд (21.03.2012 - 11:09) Игорь_Vasinsky написал(а):
вот определять переменные в шаблонах - я бы не стал, задача то максимально отделить логику и шаблона

Спустя 3 минуты, 21 секунда (21.03.2012 - 11:12) Ramzil_Nixon написал(а):
Цитата (Игорь_Vasinsky @ 21.03.2012 - 08:09)
вот определять переменные в шаблонах - я бы не стал, задача то максимально отделить логику и шаблона


Ну можно и так:

<?php echo $name; ?>


Но будет синтактическая ошибка ведь :rolleyes:

Спустя 12 минут, 59 секунд (21.03.2012 - 11:25) caballero написал(а):
Цитата
задача то максимально отделить логику и шаблона

смотря о какой логике речь.
Логика приложения этто одно а логика страницы совсем другое. Отделять логику страницы от шаблона глупо и в большинстве случаев нереализуемо .

Еше раз. Нужно четко понимать о каких шаблонах речь.
{name} с реплейсом строки- это пассивный шаблон
<?=$name?> - активный.
Реализация принципиально разная.


Спустя 1 минута, 4 секунды (21.03.2012 - 11:26) Ramzil_Nixon написал(а):
Цитата (caballero @ 21.03.2012 - 08:25)
<?=$name?>


У меня почему-то такой способ не сработало.

Спустя 3 минуты, 37 секунд (21.03.2012 - 11:30) vital написал(а):
Цитата (Игорь_Vasinsky @ 20.03.2012 - 21:08)
Цитата
Вот вижу все так пишут <?=$name?> если написать <?$name?> тоже выведет это нужно или просто стиль такой ?


тока если такие теги не отключены в php.ini, и то

<? echo $name; ?>

В пхп 5.4
<?=?> работает всегда.

Спустя 5 минут, 26 секунд (21.03.2012 - 11:35) Игорь_Vasinsky написал(а):
Цитата
<?=?> работает всегда.


Цитата
если написать <?$name?> тоже выведет это нужно или просто стиль такой ?


не много не похожи теги то.

Спустя 8 часов, 50 минут, 52 секунды (21.03.2012 - 20:26) Shkiper написал(а):
Игорь спс за демонстрацию кода попробую реализовать у себя. То что надо, только мороки много.

Спустя 4 минуты, 28 секунд (21.03.2012 - 20:30) Игорь_Vasinsky написал(а):
ну.. мороки много, а потом и путаница отседа. при этом если проект за раз не написать, т.е. с перерывами нужно изучать свой код чтобы придерживаться одной логики.

Спустя 1 день, 17 часов, 33 минуты, 43 секунды (23.03.2012 - 14:04) Shkiper написал(а):
Цитата (Игорь_Vasinsky @ 20.03.2012 - 17:59)
файл шаблона test.tpl

<h1>Hello? my name is {name}!</h1>
<p>
I loved {girlname}!</p>


файл контроллера controller.test.php

$name = 'Коля';
$girlname = 'Надя';

$tpl = file_get_contents('test.tpl');

$marks = array('{name}', '{girlname}');
$replacement = array($name, $girlname);

$parseTpl = strtr($marks, $replacement, $tpl);


файл модели test.php

include 'controller.test.php';

echo $parseTpl;


index.php

include 'test.php';

Игорь опробовал твой метод >>> Выдает ошибку Warning: strtr() expects parameter 1 to be string, array given in Z:\home\skob\www\controller.test.php on line 10
10 line >>>> $parseTpl = strtr($marks, $replacement, $tpl);

Спустя 14 минут, 2 секунды (23.03.2012 - 14:18) Игорь_Vasinsky написал(а):
Опечатался

Цитата
$parseTpl = strtr($marks, $replacement, $tpl);


$parseTpl = strtr($tpl, $marks, $replacement);

Спустя 8 минут, 51 секунда (23.03.2012 - 14:27) Shkiper написал(а):
Все равно наработает!!!!

Спустя 24 минуты, 36 секунд (23.03.2012 - 14:52) Игорь_Vasinsky написал(а):
ну что за ошибки то? и код где?

Спустя 8 минут, 47 секунд (23.03.2012 - 15:00) Shkiper написал(а):
Код ошибки такой-же!!!

Спустя 5 минут, 35 секунд (23.03.2012 - 15:06) Игорь_Vasinsky написал(а):
а что в $tpl ????

Спустя 39 минут, 12 секунд (23.03.2012 - 15:45) Shkiper написал(а):
Всмысле?????? В tpl file_get_contents('test.tpl');

Спустя 1 минута, 36 секунд (23.03.2012 - 15:47) Игорь_Vasinsky написал(а):
а пишет что массив biggrin.gif

Цитата
strtr() expects parameter 1 to be string, array given

Спустя 39 минут, 26 секунд (23.03.2012 - 16:26) Shkiper написал(а):
Нет пишет ошибку только на линии 10 (вот эта линия $parseTpl = strtr($tpl, $marks, $replacement)wink.gif

Спустя 22 часа, 28 минут, 24 секунды (24.03.2012 - 14:55) Shkiper написал(а):
Ну так как Игорь????

Спустя 5 часов, 16 минут, 21 секунда (24.03.2012 - 20:11) Shkiper написал(а):
Игорь_Vasinsky на сколько мне известно из мануала функция strtr принимает 2 параметра а у тебя их 3.

Спустя 4 минуты, 58 секунд (24.03.2012 - 20:16) Игорь_Vasinsky написал(а):
фу ты... нет там и 3 может быть, но не для этого))))


вот

$name = 'Коля';
$girlname = 'Надя';

$tpl = file_get_contents('test.tpl');



$parseTpl = strtr($tpl, array('{name}'=>$name, '{girlname}'=>$girlname));


старею :lol:

Спустя 41 секунда (24.03.2012 - 20:17) Shkiper написал(а):
СПс

Спустя 4 минуты, 37 секунд (24.03.2012 - 20:21) Shkiper написал(а):
Значит это можно вообще "выкинуть" - $marks = array('{name}', '{girlname}');
$replacement = array($name, $girlname);?

Игорь а можно у тебя проконсультироваться??? Насколько хорош(или плох) данный механизм в написании шаблонов в моей CMS?????

Спустя 50 минут, 59 секунд (24.03.2012 - 21:12) Игорь_Vasinsky написал(а):
так я выше объяснял, почитай - я там популярно объяснил минусы.

Спустя 2 дня, 19 часов, 31 минута, 48 секунд (27.03.2012 - 16:44) Shkiper написал(а):
Игорь_Vasinsky можешь мне еще в кое чем помочь??? Если сможешь то слушай. Я хотел сделать вот такую структуру:
 
$a = <?php while($files = mysql_fetch_assoc($select_files)) { ?>;
$b = <?php } ?>;
$c = $files['name'];
$v = $files['id']
$tpl = file_get_contents('template/files.tpl');
strtr($tpl, array('[files]'=>$a,'[/files]'=>$b,'{id}'=>$v,'{file_name}'=>$c));

template/files.tpl
  
Прикрепленные файлы:
[
files]<a href=download.php/?id={id}>{file_name}</a>[/files]


Но если посмотреть на $a и $b то этот миф полностью разрушат ошибки PHP. Как мне тогда это сделать????

Спустя 59 минут, 43 секунды (27.03.2012 - 17:44) Игорь_Vasinsky написал(а):
Это ещё что за синтаксис

Цитата
$a = <?php while($files = mysql_fetch_assoc($select_files)) { ?>;
$b = <?php } ?>;

Спустя 5 минут, 29 секунд (27.03.2012 - 17:49) ADiel написал(а):
Ну чем вы тут занимаетесь? php сам по себе отличный шаблонизатор..

Чем плох такой вариант?

<h1><?=$title?></h1>

<?php foreach($items as $item) : ?>

<a href="<?=$item['link']?>"><?=$item['name']?></a><br />

<?php endforeach; ?>


И в этом духе... Просто, производительно...

Спустя 8 минут, 39 секунд (27.03.2012 - 17:58) Shkiper написал(а):
ADiel - Мне это не подходит. Я делаю вот так {name} а для удобства пользователей CMS. Допустим он незнает PHP и как он будет на том, что ты написал шаблоны делать??? а мой способ более интересен,что ли, для шаблонов
Игорь мне нужно чтоб мне вывело в цикле все записи из БД по вот такой конструкции [files]<a href=download.php/?id={id}>{file_name}</a>[/files]. Я пробовал так как написал в посте, но ошибочки. Я хотелбы поинтерисоваться у тебя как мне это сделать????

Спустя 1 минута, 41 секунда (27.03.2012 - 18:00) ADiel написал(а):
Ну тут шило на мыло... Все равно без циклов не обойтись и разработчику шаблонов придется учить псевдоязык.

А почему не выбран готовый шаблонизатор?
У smarty аналогичная идея

Спустя 1 час, 7 минут, 15 секунд (27.03.2012 - 19:07) Игорь_Vasinsky написал(а):
да. тут либо php в шаблоне, либо html в контроллере.

в общем выводишь в цикле с вёрсткой свои ссылки в контроллере и записываешь в переменную, потом strtr() на {name}

etc

ob_start();

//Здесь твой цикл с версткой

$names = ob_get_contents();
$ob_end_clean;



теперь весь блок с сылками у тя в переменной $names - это называется буферизация.

Спустя 43 минуты, 43 секунды (27.03.2012 - 19:51) Shkiper написал(а):
Игорь_Vasinsky извини за тупость, но я не понял. можно продемонстрировать????

Спустя 31 минута, 56 секунд (27.03.2012 - 20:23) Игорь_Vasinsky написал(а):
//Делаешь запрос в БД на выборку
//Получаешь ассоциативный массив


ob_start();

//Здесь твой цикл с версткой, for или foreach - дело твое
while($row)
{
echo '<a href="'.$row['name'].'">'.$row['name'].'</a><br/>';
}

$names = ob_get_contents();
$ob_end_clean;


теперь в любом месте сделай

echo $names;


и всё поймёшь.


Останется тока strtr() сделать на {names} в шаблоне

Спустя 10 часов, 36 минут, 18 секунд (28.03.2012 - 06:59) Shkiper написал(а):
Игорь_Vasinsky я хотел совсем другого. Я такой метод знаю, только я делал не буферизацией, а функцией, а осознал я то, что я хочу НЕРЕАЛЬНО(бессонные ночи меня в этом убедили)

Спустя 14 минут, 7 секунд (28.03.2012 - 07:13) Игорь_Vasinsky написал(а):
как это.. Билан врёт что ли... dry.gif

Спустя 37 минут, 53 секунды (28.03.2012 - 07:51) Shkiper написал(а):
Игорь_Vasinsky я не в курсе твоего юмора biggrin.gif

Спустя 16 минут, 48 секунд (28.03.2012 - 08:08) Игорь_Vasinsky написал(а):
ну он же пел: -я знаю точно невозможное - возможно

Спустя 2 минуты, 17 секунд (28.03.2012 - 08:10) Shkiper написал(а):
это намек, или просто????

Спустя 31 минута, 37 секунд (28.03.2012 - 08:42) Shkiper написал(а):
Игорь_Vasinsky а какой функцией мне воспользоваться чтоб ней прочитать пхп файл и занести его в {name}.Пользовался file_get_contents она читает его не как скрипт, а как текст и тупо выводит код с этого файла.

Спустя 1 час, 35 минут (28.03.2012 - 10:17) Игорь_Vasinsky написал(а):
$name = eval('?>'.file_get_contents('.....'));

Спустя 6 минут, 32 секунды (28.03.2012 - 10:23) Shkiper написал(а):
работает, но с ошибками. Можно(если не трудно) еще вариант???

Спустя 9 часов, 55 минут, 25 секунд (28.03.2012 - 20:18) Shkiper написал(а):
Игорь_Vasinsky ну так как???
Цитата
работает, но с ошибками. Можно(если не трудно) еще вариант???

Спустя 41 минута, 31 секунда (28.03.2012 - 21:00) Игорь_Vasinsky написал(а):
)))))) я тока про eval() знаю - она работает, но при условии правильного php кода в доноре wink.gif
так что правь косяки с php в шаблоне и будет всё тип-топ.

Спустя 48 минут, 31 секунда (28.03.2012 - 21:49) Shkiper написал(а):
Цитата (Игорь_Vasinsky @ 28.03.2012 - 18:00)
)))))) я тока про eval() знаю - она работает, но при условии правильного php кода в доноре wink.gif
так что правь косяки с php в шаблоне и будет всё тип-топ.

Good, попробуем!!!

Спустя 2 месяца, 24 дня, 13 часов, 21 минута, 3 секунды (23.06.2012 - 11:10) spaun написал(а):
Подскажите как с помощью этой реализации вывести блоки вместо переменной?

Спустя 4 дня, 2 часа, 6 минут, 49 секунд (27.06.2012 - 13:16) Shkiper написал(а):
Ну заноси блок в функцию или буферизируй и заноси в переменную а потом выводи.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.