[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: smarty
Shurick
Пытаюсь вникнуть в smarty. Возникла проблема -

Пытаюсь вызвать функцию

PHP
function login_customer($id)
    {
    
$res=$db->sql_fetchrow($db->sql_query("select login from shop_users where id='".$id."'"));
    return 
$res[login];
    }


   
$result=$db->sql_query("select * from ".$prefix."_orders ".$filter." order by ".$_GET[orderby]." ".$_GET[dir]);
   unset(
$arr);
   while (
$res=$db->sql_fetchrow($result)){
   if(
$res[usr_id]!=='0'){[b]$res[usr_login]= $this->login_customer($res[usr_id]);[/b]}


Вылазит ошибка связанная с sql

Работает только так

PHP
function login_customer($id)
    {
    
$row mysql_fetch_array(mysql_query("select id,login from shop_users where id='".$id."'"));
    return 
$row[login];
    }




Спустя 2 минуты, 57 секунд (30.10.2009 - 16:19) krasilich написал(а):
хм, а где, собственно smarty?=)


Хотелось бы посмотреть на текст ошибки.

Спустя 1 минута, 50 секунд (30.10.2009 - 16:21) Gabriel написал(а):
а какая ошибка хоть вылазит?

Спустя 14 минут, 6 секунд (30.10.2009 - 16:35) Shurick написал(а):
да, эт я чет не допонял... к смарти запрос не имеет никакого отношения

прошу прощения, спам получился... smile.gif

Спустя 41 минута, 53 секунды (30.10.2009 - 17:17) haZe написал(а):
Ну лично я начинал в уважения к базе, путем написания правильных запростов:
PHP
$result = $db->sql_query("SELECT * FROM `" . $prefix . "_orders` " . $filter . " ORDER BY " . $_GET[orderby] . " " . $_GET[dir]);

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

if($res['usr_id'] !== '0')
{
$res['usr_login'] = $this->login_customer($res['usr_id']);
}

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

PS может быть второй запрос возвращает ноль строк и потому ошибки вылазят.
Попробуй сначала мерить сколько пришло записей и если ноль, то не выполнять цикл.

Спустя 1 месяц, 22 часа, 55 минут, 45 секунд (1.12.2009 - 16:12) Shurick написал(а):
Доброго времени суток! Не могу решить вопрос -

В главный шаблон нужно вывести блоки страницы

БАЗА

site_pages

id | parent | ...
1 | page |


site_pages_blocks


id | page_id | module_id | module_name | action | pos | property1 | roperty2
1 | 1 | 1 | articles | showarticles | 1 | 1 | null



Мой код



function get_block($id){GLOBAL $db;
$arr=array();
$result=$db->sql_query("select * from `site_pages_blocks` where `page_id`='".$id."' order by `pos`");
while ($res=$db->sql_fetchrow($result)){$arr[]=$res;}
return $arr;
}


$arr_block = array();
$arr_block = get_block($PAGE['id']);

foreach($arr_block as $arr){
switch ($arr[module_id]) {
case '1':
if($arr[action]=='showpublic'){
$articles=$db->sql_fetchrow($db->sql_query("select * from `site_articles` where `id`='".$arr['property1']."'"));
$smarty->assign('articles',$articles);
}
break;
case '2':
if($arr[action]=='shownews'){
$result=$db->sql_query("select * from `site_news` where `parent`='".$arr['property1']."'");
while ($res=$db->sql_fetchrow($result))$arr_news[]=$res;
$smarty->assign('news',$arr_news);
}
break;
}}

$smarty->assign('block',$arr_block);
$smarty->assign('tpl_name', 'block');


block.tpl


{if is_array($block)}
{
foreach from=$block item=bx }

{
if $bx.module_id=='1'}{include file="articles.tpl"}

{
elseif $bx.module_id=='2'}{include file="news.tpl"}

{
/if}

{
/foreach}
{
/if}


index.tpl


<html>
<
head>
<
title>{$SITETITLE}</title>
<
meta name="keywords" content="">
<
meta name="description" content="" />

<
meta http-equiv="content-language" content="ru">
<
meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

</
head>

<
body style="margin:0px; padding:0px;">
{$PAGENAME}
{
include file="$tpl_name.tpl"}
</body>

</
html>



И он естественно работает не корректно. ПОМОГИТЕ ПЛИЗ!

Спустя 7 минут, 36 секунд (1.12.2009 - 16:20) Adil написал(а):
Что понимается под "работает не корректно" ?

Спустя 2 минуты, 43 секунды (1.12.2009 - 16:23) Shurick написал(а):
Код выводит статьи только по одному id-у. допустим в базе два болока

id=1 title=Техническая поддержка
id=2 title=Котакты

Вывод

Техническая поддержка
Техническая поддержка

Спустя 2 часа, 33 минуты, 40 секунд (1.12.2009 - 18:56) Shurick написал(а):
Вопрос закрыт

Скрипт
    foreach($arr_block as $arr){
if($arr[action]=='showpublic'){
$arr_public=array();
$res=$db->sql_fetchrow($db->sql_query("select `id`,`title` from `site_public` where `id`='".$arr['property1']."'"));
$arr_public[]=array('id'=>$res[id],'title'=>$res[title]);
$block[$arr['id']]['public']=$arr_public;
}
if($arr[action]=='shownews'){
$arr_news=array();
$result=$db->sql_query("select `id`,`title` from `site_news` where `parent`='".$arr['property1']."'");
while ($res=$db->sql_fetchrow($result)){
$arr_news[]=array('id'=>$res[id],'title'=>$res[title]);
$block[$arr['id']]['news']=$arr_news;
}
}
}


$smarty->assign('block',$block);
$smarty->assign('tpl_name', 'block');


пример массива

Array
(
[1] => Array
(
[public] => Array
(
[0] => Array
(
[id] => 2
[title] => Контакты
)

)

)

[3] => Array
(
[news] => Array
(
[0] => Array
(
[id] => 51
[title] => Новость
)

[1] => Array
(
[id] => 52
[title] => Новость 2
)

)

)

[2] => Array
(
[public] => Array
(
[0] => Array
(
[id] => 3
[title] => Техническая поддержка
)

)

)

[4] => Array
(
[news] => Array
(
[0] => Array
(
[id] => 53
[title] => Заголовок:
)

[1] => Array
(
[id] => 54
[title] => Заголовок:
)

)

)

)





block.tpl

{foreach from=$block item=item key=key}

{foreach from=$item item=x key=k}
{if $k=='public'}
{foreach from=$x item=x}{include file="public.tpl" public=$x}{/foreach}
{else if $k=='news'}

{foreach from=$item item=x}
{foreach from=$x item=xn}
{include file="news.tpl" news=$xn}
{/foreach}
{/foreach}

{/if}
{/foreach}

{/foreach}


public.tpl


<b>Публикация</b> {$public.title}


news.tpl

<b>Новость</b> {$news.title}


сам спросил - сам ответил huh.gif smile.gif

Спустя 1 день, 3 часа, 14 минут, 39 секунд (2.12.2009 - 22:11) Shurick написал(а):


КТО ЗНАЕТ - можно ли обработанный шаблон засунуть в массив!?

Спустя 18 часов, 5 минут, 15 секунд (3.12.2009 - 16:16) Shurick написал(а):
отвечаю на свой вопрос biggrin.gif

fetch - Функция возвращает вывод шаблона вместо его отображения на экран.

$output = $smarty->fetch("index.tpl");


_____________
Быстрый ответ:

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