|
|
|
| На страницу выводятся ссылки при помощи обрабочика и шаблона:
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>
|
Но у меня перехода по ссылке нет, значит, что-то неправильно. Что? | |
|
|
|
|
|
|
|
для: Лена
(04.09.2008 в 17:20)
| |
<p><A HREF='?quest={$one.id}'>{$one.main_text}</A></p><br />
|
И куда он должен идти по такой ссылке? Есть только параметр и все. | |
|
|
|
|
|
|
|
для: Лена
(04.09.2008 в 17:20)
| | ?quest - будет обращаться к файлу скрипта породившем этот код. Пропишите, name.php?quest ={$one.id}, где name.php файл обработчик этого запроса. | |
|
|
|
|
|
|
|
для: 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($fp, LOCK_EX);
$text = fread($fp, filesize($filename));
$head = strtok($text, "\n");
$text = substr($text, strpos($text, ".")+1);
$text = nl2br($text);
//$smarty->assign("title", $title);
$smarty->assign("a", $head);
$smarty->assign("b", $text);
$smarty->display("table.tpl");
flock($fp, LOCK_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-параметров | |
|
|
|
|
|
|
|
для: Лена
(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}, а оно определено? Получается что этот последний пример ничего не выводит? | |
|
|
|
|
|
|
|
для: 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, то ссылки выводятся | |
|
|
|
|
|
|
|
для: Лена
(05.09.2008 в 09:58)
| | Ничего не понятно, если честно. У вас в шаблоне, вывод:
{if $smarty.get.quest}
<div class = "hptitle"><h4>{$a}</h4></div>
<div class = "content">{$b}</div>
....
О каких ссылках идет речь? Те что опрделены ранее и выводятся другим шаблоном? Если так, то подключается ли этот шаблон, то есть, есть ли запрос (условие) для вывода его? | |
|
|
|
|
|
|
|
для: 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($fp, LOCK_EX);
$text = fread($fp, filesize($filename));
$head = strtok($text, "\n");
$text = substr($text, strpos($text, ".")+1);
$text = nl2br($text);
flock($fp, LOCK_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:44)
| | Всем спасибо, все получилось. Тема закрыта | |
|
|
|
|
|
|
|
для: Лена
(05.09.2008 в 09:23)
| | Логичней все таки переменные проверять в скрипте (логика обработки), и если переменная верна, выводить шаблон (логика представления) . Не надо переносить в шаблон принятие решений. | |
|
|
|