Шаблон с условием

DenVeroid

Новичок
Шаблон с условием

Как сделать условие по шаблону, нужно сделать выделение на выбранные разделы тоесть если в адресной строке cat=1 будет равна "1" то раздел должен быть выделенным а другие остаться невыделенными
вот чтото наваял:

PHP:
// test.php

<?php
 require_once('global.php');

   include "config.inc";
   $db = @mysql_connect("localhost", "$databaseuser", "$databasepasswd");
   @mysql_select_db("$databasename",$db);

        $cat=(int)$_GET['cat'];
        $sql="SELECT * FROM category WHERE status=1";
        $result = @mysql_query($sql,$db);
         while($row=mysql_fetch_array($result)) {

            $cat_row = Array();
            $i=0;

            $tmp = array(
                'categoryname' => $row['name'],
                'categoryid'   => $row['categoryid'],
                            );
            $cat_row[$i++] = $tmp;

$system->assign("cat", $cat);
$system->assign("catid", $cat_row);
$system->assign("category", $row['categoryid']);
$system->display('category_menu.tpl');
}
?>

// category_menu.tpl

{foreach from=$catid item=i}
{if $cat==$category}

<tr><td><a href=test.php?cat={$i.categoryid}><b>{$i.categoryname}</b></a></td></tr>

{else}

<tr><td><a href=test.php?cat={$i.categoryid}>{$i.categoryname}</a></td></tr>

{/if}
{/foreach}
данный код парсирует как надо, но проблема заключается в том когда я помещяю текст за {foreach} {/foreach} до или после то этот текст повторяется несколько раз, как сделать чтобы повторялось один раз?
 

Krisha

pain in the neck
DenVeroid
Поясни, плиз смысл вот этого кода:

PHP:
            $cat_row = Array(); 
            $i=0; 

            $tmp = array( 
                'categoryname' => $row['name'], 
                'categoryid'   => $row['categoryid'], 
                            ); 
            $cat_row[$i++] = $tmp;
 

DenVeroid

Новичок
по этому коду выводяться все разделы, из MySQL
categoryname = название раздела (буквами)
categoryid = id раздела (цифры)
 

Krisha

pain in the neck
а чем тебя не устраивает такая запись:
PHP:
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
   $categories[] = $row;
}
 

DenVeroid

Новичок
хм, ивени чёт странно получется, заменил так

PHP:
<?php
 require_once('global.php');

   include "config.inc";
   $db = @mysql_connect("localhost", "$databaseuser", "$databasepasswd");
   @mysql_select_db("$databasename",$db);

        $cat=(int)$_GET['cat'];
        $sql="SELECT * FROM category WHERE status=1";
        $result = @mysql_query($sql);

            while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
             {
              $categories[] = $row;

$system->assign("cat", $cat);
$system->assign("catid", $categories);
$system->assign("category", $categories[1]);
}
$system->display('category_menu.tpl');

?>


сам шаблон оставил без изменений

результат:
ничего не выводит :(
 

Frol

Новичок
что
PHP:
$system->assign("cat", $cat);
$system->assign("catid", $categories);
$system->assign("category", $categories[1]);
делает в цикле?
 

DenVeroid

Новичок
делает в цикле?
вообщем сторчка

$system->assign("cat", $cat); передаёт посланной ссылкой гетом $_GET['cat']
где уже в самом шаблоне она $cat сравнивается с $category
$system->assign("category", $categories[1]);
через цикл равной её.
а строчка
$system->assign("catid", $categories);
преднозначена для
{foreach from=$catid item=i}


блин, чую я что делаю чёто не то, криво както получается.
чем дальше, тем всё запутанее получается, блин

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

Krisha

pain in the neck
DenVeroid
Разве в моем примере в цикле что-то есть, кроме одной строки ?
PHP:
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
   $categories[] = $row; 
}
$system->assign("categories", $categories);
$system->display('category_menu.tpl');
{section name=row loop=$categories}
<tr>
{foreach from=$categories[row] item=$category}
{if $smarty.get.cat == $category.categoryid}
<td><a href="test.php?cat={$category.categoryid}"><b>{$category.categoryname}</b></a></td>
{else}
<td><a href="test.php?cat={$category.categoryid}">{$category.categoryname}</a></td>
{/if}
{/foreach}
</tr>
{/section}
 

DenVeroid

Новичок
на вопрос ответь
извени, что нетак ответил
почему в цикле, просто я ошибся, я считал что за пределом цикла должен быть только display()

Krisha,
спасибо за код, но почемуто ни чего браузер непоказывает, что может быть?
 

Frol

Новичок
{foreach from=$categories[row] item=$category}

не нужен знак доллара там
 

DenVeroid

Новичок
Frol, теперь выводит что-то, пока сам немогу разобраться в каком порядке она выводит, и почемуто парсирует одно и тоже 11 раз, что интересно в том месте где должны быть имена разделов {$category.categoryname} выводит только по одной первой букве каждого раздела

кстати, в самой базе данных MySQL в таблице
category, название поля раздела, называется "name"
как исправить чтобы выводилось названия раздела поностью я пробывал так сделать {$category.name} но ничего не получается
 

Krisha

pain in the neck
DenVeroid
Отрой ман по смарти и посмотри section и foreach, вероятно в твоем случае будет достаточно просто foreach без section...
 

DenVeroid

Новичок
чёрт побери, а ведь правельно ты меня отправил к мануалу, всё верно говоришь, section убрал
вообщем вот как сделал, может кому пригдиться (новичкам чтоль)

шаблон:
<tr>
{foreach from=$categories item=category}
{if $smarty.get.cat == $category.categoryid}
<td><a href="test.php?cat={$category.categoryid}"><b>{$category.categoryname}</b></a></td>
{else}
<td><a href="test.php?cat={$category.categoryid}">{$category.categoryname}</a></td>
{/if} <br>
{/foreach}
</tr>

PHP:
<?php

 require_once('global.php');

   include "config.inc";
   $db = mysql_connect("localhost", "$databaseuser", "$databasepasswd");
   mysql_select_db("$databasename",$db);

        $cat=(int)$_GET['cat'];
        $sql="SELECT * FROM category WHERE status=1";
        $result = mysql_query($sql);

               $categories = Array();
               $i=0;
               
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
            $tmp = array(
                'categoryname' => $row['name'],
                'categoryid'   => $row['categoryid'],
                            );
            $categories[$i++] = $tmp;
}
$system->assign("categories", $categories);
$system->display('category_menu.tpl');
?>
извеняюсь что напостил тут большие отрывки кода, больше небуду.

да и вопросик такой, обязательно надо использовать MYSQL_ASSOC в mysql_fetch_array()
я пробывал и без ниё всё нормально работало, интересно
зачем тогда она нужна?


и ещё помню где-то на форуме оставляли ссылку на русский перевод по смарти, немогу найти
 

Krisha

pain in the neck
DenVeroid
1. [m]mysql_fetch_array[/m]
2. зачем ты вручную создаешь массив, если за тебя это делает п.1 ?
 

DenVeroid

Новичок
2. зачем ты вручную создаешь массив, если за тебя это делает п.1 ?
ну так как потом в шаблоне переменные использовать?
а по времени выполнения, мой код дольше выполняется?
 

DenVeroid

Новичок
хм, странно, заменил я

это
PHP:
            $tmp = array( 
                'categoryname' => $row['name'], 
                'categoryid'   => $row['categoryid'], 
                            ); 
            $categories[$i++] = $tmp;
на этот

PHP:
$categories[] = $row;
шаблон оставил как был
теперь вообще ничего не выводит
что я не так делаю?

-~{}~ 04.05.04 21:36:

ааа... всё понял, но тогда придётся в шаблоне использовать имена именно такие же как и в таблице базе данных, а тут я уже создаю свои имена, хотя надо было раньше думать делать названия имён при создании самой базы данных, но всёже не учтёж, к примеру ид раздела у меня в базе "categoryid" а в шалоне хочу называть так"cat_id"
 

DenVeroid

Новичок
Krisha, извеняюсь что долго неотвечал

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