Как сделать чтобы PHP понял Smarty.

Romario

Новичок
Как сделать чтобы PHP понял Smarty.

Вот код:

PHP:
$url = 'site.ru'; 

$file = 'http://xml.yaca.yandex.ru/yca/cy/ch/'.$url.'/'; 
$file_cont = file_get_contents($file); 
preg_match('/<b>Индекс цитирования (тИЦ) ресурса.+?"Кто ссылается">(d+)</a>/i', $file_cont, $matches); 
echo 'Индекс цитирования сайта '.$url.' по яндексу равен '.$matches[1];
Мне нужно чтобы внизу каждой ссылки показывался ИЦ яндекса, PR гугле уже есть.

Чтобы все это работало нужно в $url = 'site.ru'; в место 'site.ru' вставить переменную которая бы подставляла УРЛ сайта, переменная такая есть {$link.URL} но это smarty и поэтому не работает т.к. скрипт для показа ИЦ это ПХП код, значит нужно найти или создать такую переменную чтобы работала с ПХП кодом в .tpl файлах или это не правильный ход мыслей? Расскажите как это сделать?
 

tony2001

TeaM PHPClub
не понял ни слова.
попробуй еще раз, с коротким примером шаблона и обязательным прочтением своего сообщения до отправки.
 

alexhemp

Новичок
Пойти на smarty.php.net и почитать документацию. Целиком - она не большая.
 

Romario

Новичок
Все на документацию отпраляют, есть у меня уже она и читал я ее.

Есть пример скрипта который находится выше (он показывает Индекс Цитирования Яндекса), главное что интересует в этом скрипте это 1 строка:

$url = 'сюда пишется адрес сайта';

Так вот у меня есть скрипт "Каталог ресурсов" использующий smarty, значит все переменные (или как их там) в формате smarty. Есть шаблон скрипта под названим link.tpl:

PHP:
{strip}
<table width="100%" border="0" cellspacing="2" cellpadding="5">
  <tr>
    <td colspan="5"><li type="square"><a class="cats" id="{$link.ID}" href="{$link.URL}"
{* nofollow *}
{if $link.NOFOLLOW or ($link.RECPR_VALID eq 0 and 
	($smarty.const.RECPR_NOFOLLOW eq 2 or 
	($smarty.const.RECPR_NOFOLLOW eq 1 and $link.RECPR_REQUIRED eq 1)))
    } rel="nofollow"
{/if}{if $smarty.const.ENABLE_BLANK} target="_BLANK"{/if}>
{$link.TITLE}</a></td>
  </tr>
  <tr>
    <td colspan="5">{$link.DESCRIPTION}</td>
  </tr>
  <tr>
    <td colspan="5">{$link.URL}</td>
  </tr>
  <tr>
    <td class="bg3">
{* show page rank *}
{if $smarty.const.SHOW_PAGERANK}
{include file="pagerank.tpl" pr=$link.PAGERANK}
{/if}
</td>
    <td>2</td>
    <td>{include file="cy.tpl"}</td>
    <td>4</td>
    <td>5</td>
  </tr>
</table>
{/strip}
Так вот в этот шаблон я вставляю это скрипт в тегах {php}{/php}, и вот если я пишу в 1 строке конкретный адрес сайта то скрипт работает нормально пример:
$url = 'phpclub.ru';

следовательно под каждой ссылкой будет показан ИЦ сайта phpclub.ru. А мне этого не нужно, мне нужно чтобы для каждой ссылки показывался именно ее ИЦ т.е. в

$url = 'нужно вставить переменную'; которая бы автоматически подставляла нужный УРЛ, для Smarty такая есть это {$link.URL} но в PHP коде она не работает, так вот я хочу знать как сделать такую переменную, что и где прописать т.е. создать переменную аналогичную {$link.URL} только чтобы она работала в тегах {php}{/php}.


Ух, вроде все...
 

kvf77

Red Devil
Romario

вообще-то не майся дурью. все это, включая твою функцию, надо делать не в Smarty а в твоем вызывающем скрипте, а в Smarty передавать готовый код счетчика
 

alexhemp

Новичок
Romario

Еще раз документацию перечитай. Ты не понял - зачем вообще нужен смарти.

Данные формировать нужно в PHP. В самарти - выводить оформление.

Поэтому значение индекса нужно доставать в php скрипте.
В том-же цикле, где ты передаешь смарти данные о ссылках.

Кстати - я бы на твоем месте значение ИЦ и PR хранил бы в базе и опрашивал периодически. (раз в неделю - будет достаточно, он пересчитывается гораздо реже).
А то каждый запрос страницы с ссылками будет пораждать кучу запросов к яндексу.
 

Romario

Новичок
Кстати - я бы на твоем месте значение ИЦ и PR хранил бы в базе и опрашивал периодически. (раз в неделю - будет достаточно, он пересчитывается гораздо реже).
А то каждый запрос страницы с ссылками будет пораждать кучу запросов к яндексу.
Ну да это было бы хорошо только вот если бы я знак как это сделать, может подскажешь?
 

alexhemp

Новичок
элементарно

1. пишешь скрипт на PHP который считывает из базы все ссылки запрашивает для них эти данные и записывает в соотв. записи в базе

2. Читаешь что такое CRON, зачем он нужен

3. Выставляешь в CRON-е вызов своего скрипта скажем в среду ночью.
 

konstantin_18

Guest
насчет товего шаблона, тебе ответили очень правильно:
ты не понял, зачем нужен смарти.
Делается вообще-то так:
file.tpl
{*SMARTY TEMPLATE*}
<html>
...{*some template here*}
<b>{$name}</b>
....{*some more template here*}
</html>
file.php
PHP:
$smarty = new Smarty();
//assign some properties
$smarty->Assign('name','Vasia');
$smarty->Display('file.tpl');
А вообще-то лючше написать свой небольшой и простой движок шаблонов. Smarty - конечно круто, но работает медленно...
 

alexhemp

Новичок
konstantin_18

Не провоцируйте флейм... смарти работает очень даже быстро, особенно если использовать кеш байт-кода.

Те кто могут написать свой шаблонизатор быстрее в таком совете не нуждаются, сами с усами. А новички пусть лучше смарти используют.
 
Сверху