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

HTML+CSS+JavaScript

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

 

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

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

тема: Смарти, вывод ссылки
 
 автор: Лена   (04.09.2008 в 17:20)   письмо автору
 
 

На страницу выводятся ссылки при помощи обрабочика и шаблона:
quest.php:

<?php
require ('smarty/Smarty.class.php');
$smarty = new Smarty;

include_once(
"configs/dbopen.php");

$sql "SELECT * FROM `texts` WHERE `id_mod` = 13 ORDER BY `id` DESC";

$result mysql_query($sql$link);
$quest = array();
     while (
$row mysql_fetch_assoc($result))
     {
     
$quest[] = $row
     
$id $row['id'];
     
$n $row['main_text'];
     
$n strtok($n'.');
     
print_r($row);
     }
$smarty->assign('quest'$quest);
$smarty->display("qu.tpl");
?>



{foreach from=$quest item=one}
<p><A HREF='?quest={$one.id}'>{$one.main_text}</A></p><br />
{/foreach}


Теперь я хочу перейти по этой ссылке с помощью смарти: нажимаешь на ссылку - появляется соответствующий текст:
table.php

<?php
require ('smarty/Smarty.class.php');
$smarty = new Smarty
$s "Смарти перепортил всю малину";
$smarty->assign('a'$s);
$smarty->display("table.tpl");
?>

И шаблон к этому table.tpl:

<html>
<head>
</head>

<body>
<table border = 3>
<tr>
  <td>    {if $smarty.get.quest}
      {$a}
    {/if}
  </td>
</tr>
</table>
</body>
</html>


Но у меня перехода по ссылке нет, значит, что-то неправильно. Что?

  Ответить  
 
 автор: GeorgeIV   (04.09.2008 в 17:51)   письмо автору
 
   для: Лена   (04.09.2008 в 17:20)
 

<p><A HREF='?quest={$one.id}'>{$one.main_text}</A></p><br />


И куда он должен идти по такой ссылке? Есть только параметр и все.

  Ответить  
 
 автор: sim5   (04.09.2008 в 17:54)   письмо автору
 
   для: Лена   (04.09.2008 в 17:20)
 

?quest - будет обращаться к файлу скрипта породившем этот код. Пропишите, name.php?quest ={$one.id}, где name.php файл обработчик этого запроса.

  Ответить  
 
 автор: Лена   (05.09.2008 в 09:23)   письмо автору
 
   для: sim5   (04.09.2008 в 17:54)
 

Спасибо, получилось. Заменила: <p><A HREF='table.php?quest={$one.id}'>{$one.main_text}</A></p><br />

Теперь нужно усложнить пример.
quest.php и qu.tpl - те же (см.выше)
заменяем данные в table.php:
<?php
require ('smarty/Smarty.class.php');
$smarty = new Smarty
include(
"configs/dbopen.php");
if(!isset(
$_GET['id'])) return false;
$id intval($_GET['id']);
$sql "SELECT * FROM `texts` WHERE `id_mod` = 11 AND id = $id";
$result mysql_query($sql$link);
while (
$row mysql_fetch_assoc($result)){
//print_r($row);
$name $row['main_text'];
$title strtok($name".");
$filename "content/advices/" $name;

$fp fopen($filename"r");
flock($fpLOCK_EX);
$text fread($fpfilesize($filename));
$head strtok($text"\n");
    
$text substr($textstrpos($text".")+1);
    
$text nl2br($text); 
//$smarty->assign("title", $title);
$smarty->assign("a"$head);
$smarty->assign("b"$text);
$smarty->display("table.tpl");
flock($fpLOCK_UN);
fclose($fp);
}
?>


И шаблон table.tpl:
<html>
<head>
</head>

<body>
<table border = 3>
<tr>
  <td>    {if $smarty.get.quest}
      <div class = "hptitle"><h4>{$a}</h4></div>
    <div class = "content">{$b}</div>

    {/if}
  </td>
</tr>
</table>
</body>
</html>



Если не разбивать на шаблоны и обработчики, все лепить в одном php-файле, все выводится. Что не так?
Думаю, причина в передаче $_GET-параметров

  Ответить  
 
 автор: sim5   (05.09.2008 в 09:35)   письмо автору
 
   для: Лена   (05.09.2008 в 09:23)
 

Первое:
if(!isset($_GET['id'])) return false;
$id = intval($_GET['id']);
заменить на:
$id = $_GET['id'] ? intval($_GET['id']) : 0; //либо false
затем проверяя:
if ($id) {
//выполнять здесь все остальное
}
И еще, разумнее завершить работу РНР скрипта (разблокировать файл, закрыть его), а затем начинать вывод шаблона.
Что касается "все лепить в одном", не понятно, но... Вы проверяете в шаблоне {if $smarty.get.quest}, а оно определено? Получается что этот последний пример ничего не выводит?

  Ответить  
 
 автор: Лена   (05.09.2008 в 09:58)   письмо автору
 
   для: sim5   (05.09.2008 в 09:35)
 

{if $smarty.get.quest} определено в шаблоне quest.tpl: (см. в предыдущих постах)
<div class = ''><p><A HREF='table.php?id={$one.id}'>{$one.main_text}</A></p></div><br />

Да, последний пример ничего не выводит.

>Что касается "все лепить в одном", не понятно, но...
Я имела ввиду, что если этот пример делать без Смарти, на одном PHP, то ссылки выводятся

  Ответить  
 
 автор: sim5   (05.09.2008 в 10:11)   письмо автору
 
   для: Лена   (05.09.2008 в 09:58)
 

Ничего не понятно, если честно. У вас в шаблоне, вывод:
{if $smarty.get.quest}
<div class = "hptitle"><h4>{$a}</h4></div>
<div class = "content">{$b}</div>
....
О каких ссылках идет речь? Те что опрделены ранее и выводятся другим шаблоном? Если так, то подключается ли этот шаблон, то есть, есть ли запрос (условие) для вывода его?

  Ответить  
 
 автор: Лена   (05.09.2008 в 10:44)   письмо автору
 
   для: sim5   (05.09.2008 в 10:11)
 

Еще раз все от и до, чтобы стало понятней.
quest.php обрабатывает шаблон, который выводит группу ссылок:
вот quest.php

<?php
require ('smarty/Smarty.class.php');
$smarty = new Smarty;

include_once(
"configs/dbopen.php");

$sql "SELECT * FROM `texts` WHERE `id_mod` = 13 ORDER BY `id` DESC";

$result mysql_query($sql$link);
$quest = array();
     while (
$row mysql_fetch_assoc($result))
     {
     
$quest[] = $row
     
$id $row['id'];
     
$n $row['main_text'];
     
$n strtok($n'.');
     
print_r($row);
     }

$smarty->assign('arr'$quest);
$smarty->display("qu.tpl");

?>


Его шаблон qu.tpl:

{foreach from=$arr item=one}
<p><A HREF='table.php?id={$one.id}'>{$one.main_text}</A></p><br />
{/foreach}


Потом, когда нажимаешь на любую ссылку подключается table.php:

<?php
require ('smarty/Smarty.class.php');
$smarty = new Smarty
include(
"configs/dbopen.php");
$id $_GET['id'] ? intval($_GET['id']) : false;
if(
$id){
$sql "SELECT * FROM `texts` WHERE `id_mod` = 13 AND id = $id";
$result mysql_query($sql$link);
while (
$row mysql_fetch_assoc($result)){
//print_r($row);
$name $row['main_text'];
$title strtok($name".");
$filename "content/quest/" $name;

$fp fopen($filename"r");
flock($fpLOCK_EX);
$text fread($fpfilesize($filename));
$head strtok($text"\n");
    
$text substr($textstrpos($text".")+1);
    
$text nl2br($text);
flock($fpLOCK_UN);
fclose($fp); 
//$smarty->assign("title", $title);
$smarty->assign("a"$head);
$smarty->assign("b"$text);
$smarty->display("table.tpl");
}
}
?>


Убрала $smarty.get.quest из шаблона table.tpl, как советовали. Хорошо, пусть этим занимается только обработчик.
Вот table.tpl
<html>
<head>
</head>
<body>
<table border = 3>
<tr>
  <td>   
      <div class = "hptitle"><h4>{$a}</h4></div>
    <div class = "content">{$b}</div>
  </td>
</tr>
</table>
</body>
</html>


Сейчас у меня выводятся все ссылки из quest.php, нажимаю на ссылку - ошибка Warning: fopen(content/quest/ремонт квартиры.txt ) [function.fopen]: failed to open stream: No such file or directory in s:\home\avart.ua\www\table.php on line 15
Мол, файл не открывается, нет такого файла в этой директории. Хотя файл там на самом деле лежит.
В чем может быть причина?

  Ответить  
 
 автор: Лена   (05.09.2008 в 10:49)   письмо автору
 
   для: Лена   (05.09.2008 в 10:44)
 

Всем спасибо, все получилось. Тема закрыта

  Ответить  
 
 автор: GeorgeIV   (05.09.2008 в 09:54)   письмо автору
 
   для: Лена   (05.09.2008 в 09:23)
 

Логичней все таки переменные проверять в скрипте (логика обработки), и если переменная верна, выводить шаблон (логика представления) . Не надо переносить в шаблон принятие решений.

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

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