Jump to content
  • 0

Совсем запутался.


SiRius
 Share

Question

Я не знаю как решить проблему.

Передо мной стоит задача реализовать меню вида

>Главная страница >Регистрация >Вход

В случае входа пользователя, чтобы она менялась на

>Главная страница >Профиль >Выход

Код менюшки у меня такой (vmenu.tpl)

		
[url="http://%22$HOME_PAGE_LINK%7B:content:%7Dquot;"]Главная[/url]

{if #user# == 1}

[url="http://%22$PERSONAL_PAGE_LINK%7B:content:%7Dquot;"]Профиль[/url]

{else}

[url="http://%22$REGISTER_LINK%7B:content:%7Dquot;"]Регистрация[/url]

{/if}

{if #user# == 1}

[url="http://%22$LOGOUT_LINK%7B:content:%7Dquot;"]Выход[/url]

{else}

[url="http://%22$LOGIN_LINK%7B:content:%7Dquot;"]Вход[/url]

{/if}

вызывается в файле inxex.tpl

{include file="header.tpl"}
{include file="vmenu.tpl"}
{include file="footer.tpl"}

.conf файл

# глобальные переменные

User="1"

Так вот. Проблема в том, что когда я меня переменную Юзер с 0 на 1 и наоборот, то ничего не происходит. Бывает что срабатывает, но чаще нет.

Подскажите пожалуйста где косяк?

Link to comment
Share on other sites

20 answers to this question

Recommended Posts

  • 0

Зачем тебе вводить каких-то юзеров, когда можно все с помощью сессий сделать. При входе на сайт значение сессии с именем login присваивается 1, а при помощи $smarty.session.login проверяется, равно значение 1 или нет. И выводишь при этом "Вход" или "Выход".

Link to comment
Share on other sites

  • 0

вот так у меня:

{if ($lgn ne "")}
<li><a href="/?user_details=yes">{$smarty.const.MANAGE_ACCOUNT}</a></li>
{else}
<li><a href="/?register=yes">{$smarty.const.REGISTER}</a></li>
{/if}

а переменная lgn определяется инклюдом-авторизатором:

if(isset($_SESSION['lgn']))
$row = db_fetch_row(db_query('SELECT user_pwd FROM '.USERS_TABLE." WHERE user_lgn='".$_SESSION['lgn']."'"));
if(!$row || !isset($_SESSION['pwd']) || strcmp($row[0],$_SESSION['pwd'])) {
unset($_SESSION['lgn']); session_unregister('lgn');
unset($_SESSION['pwd']); session_unregister('pwd');
}
$smarty->assign('lgn',$_SESSION['lgn']);
}

Link to comment
Share on other sites

  • 0

Пожалуйстя, помогите в решении еще нескольких вопросов...

сайт имеет структуру (для наглядности)

header.tpl

{$LEFT_MENU}

{$BODY}

footer.tpl

слева хочу сделать меню

[*]Новости1

[*]Новости2

[*]Новости3

[*]Новости4

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

Справа от меню, есть центральная часть(контент), за содержимое которой отвечает переменная {$BODY}

Я хочу чтобы при нажатии на ссылку, контент обновился. Тоесть в переменную $BODY записалось бы какая либо информация, будь то данные из БД или содержимое какого либо шаблона (например NEWS1.tpl)

2) как это можно реализовать?

Объясните чайнику плизз....

Link to comment
Share on other sites

  • 0

Итак, во-первых, код представляйте в специальных тегах форума

[code ] [ /code].

Значит вот файл, к примеру, index.php:
// созда?м переменную в которой будет храниться контент
$BODY = '';

/*

Выполняем какиенебудь операции будь то чтение из базы или обработка чего-либо

В общем переменная $BODY будет накапливать в себе какието контентные данные...

К примеру:

$BODY .= 'Тестовый контент';

или

$BODY .= read_content_from_db();

*/

require_once("lib/smarty/Smarty.class.php");

// созда?м экземпляр класса Smarty в переменную $smarty
$smarty = new Smarty();

// базвые настройки взятые из manual-а( http://smarty.php.net/ )
$smarty->template_dir = '/web/www.example.com/smarty/guestbook/templates/';
$smarty->compile_dir = '/web/www.example.com/smarty/guestbook/templates_c/';
$smarty->config_dir = '/web/www.example.com/smarty/guestbook/configs/';
$smarty->cache_dir = '/web/www.example.com/smarty/guestbook/cache/';

// Делаем переменную $BODY видимой из шаблона, как {$BODY}. Переда?м ссылку.
// Дополнительно читайте в manual-е по смарти
$smarty->assign_by_ref('BODY', &$BODY);

// Так же можно присваивать массивы данных, например $MENU лучше передавать в шаблон
// как массив...

$smarty->display('main.tpl');

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

$template_content = $smarty->fetch('template_name.tpl');

Результат выполнения шаблона будет содержаться в переменной $template_content.

Вообще возможности смарти очень велики...

Ссылки по теме:

1. Официальный сайт Smarty. Здесь можно скачать русскую документацию

2. Smarty, пристальный взгляд на функции.

3. Smarty - не просто шаблоны

Link to comment
Share on other sites

  • 0

Помогите разобраться!!!

Общая картина: SQL + PHP + Smarty.

Есть таблица user_site с информацией о пользователях.

И есть таблица comments с комментариями и логином пользователя.

Нужно с таблицы comments посмотреть поле author и вытащить всю информацию с таблицы user_site где логин = author.

Вывести все комментарии, и информацию о юзере который его добавил.

//———————*.tpl—————————— 
{foreach from=$comments_arr item=comments}
<tr>
<td align="left" bgcolor="#081745">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td width="23%" bgcolor="#081745">
<center><p class="info_news">
{$comments.author}<br />
<img src="{$user_arr2.avatar}" width="100"/><br /><br />
Страна: <img src="{$user_arr2.country}" /><br />
Пол: <img src="{$user_arr2.pol}" /><br />
Дата: {$comments.date}<br />
</p>
</center>
</td>
<td align="left" width="77%"><p class="text_news">{$comments.text}</p></td>
</tr>
</table>
</td>
</tr>
{/foreach}

//———————*. php—————————— 
$result = mysql_query("SELECT author FROM comments WHERE post=$new_id and type='news' ORDER BY id DESC LIMIT 10",$db);
while($row = mysql_fetch_array($result)) {
$author = $row['author'];
$result2 = mysql_fetch_array(mysql_query("SELECT * FROM user_site WHERE login='$author'",$db));
}
$smarty->assign("user_arr2", $result2);

$news_arr=array();
$query = "SELECT * FROM comments WHERE post=$new_id and type='news' ORDER BY id DESC LIMIT 10";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
$comments_arr[] = array('id' => $row['id'], 'post' => $row['post'], 'type' => $row['type'], 'author' => $row['author'], 'text' => $row['text'], 'email' => $row['email'], 'date' => $row['date']);}
$smarty->assign("comments_arr", $comments_arr);

ЗАРАНЕЕ БЛАГОДАРЕН!!!

Link to comment
Share on other sites

  • 0

Ясно. С SQL конструкцией JOIN не знакомы...

SELECT * FROM (comments LEFT JOIN user_site ON comments.author = user_site.login) WHERE post=$new_id and type='news'

Вообще в поле comments.author нужно записывать ID автора из таблицы user_site, а не логин...

Link to comment
Share on other sites

  • 0

спасибо за ответ.

Так это получается что запрос склеивает две таблицы по comments.author = user_site.login????

Тогда

$result =  mysql_query("SELECT * FROM (comments LEFT JOIN user_site ON comments.author = user_site.login) WHERE post=$new_id and type='news' ORDER BY id DESC LIMIT 10",$db);
while($row = mysql_fetch_array($result)) {
$comments_arr[] = array('id' => $row['id'],'avatar' => $row['avatar'], 'post' => $row['post'], 'type' => $row['type'], 'author' => $row['author'], 'text' => $row['text'], 'email' => $row['email'], 'date' => $row['date']);}
$smarty->assign("comments_arr", $comments_arr);

{foreach from=$comments_arr item=comments}
<tr>
<td align="left" bgcolor="#081745">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td width="23%" bgcolor="#081745">
<center><p class="info_news">
{$comments.author}<br />
<img src="{$comments.avatar}" width="100"/><br /><br />
Страна: <img src="{$comments.country}" /><br />
Пол: <img src="{$comments.pol}" /><br />
Дата: {$comments.date}<br />
</p>
</center>
</td>
<td align="left" width="77%"><p class="text_news">{$comments.text}</p></td>
</tr>
</table>
</td>
</tr>
{/foreach}

Ну либо я что то не понял, короче не работает.

Отсылает пустой массив.

Link to comment
Share on other sites

  • 0

Да, этот запрос расширяет таблицу comments, присоединяя к ней поля из таблицы user_site.

Простите, запрос писал в спешке, не изучив до конца задачи. Я так понял, что нужно выбрать инфо о всех пользователях, которые оставили комментарии.

Попробуйте такой запрос:

SELECT user_site.* FROM (comments LEFT JOIN user_site ON comments.author = user_site.login) WHERE comments.post=$new_id AND comments.type='news'

Link to comment
Share on other sites

  • 0
Я так понял, что нужно выбрать инфо о всех пользователях, которые оставили комментарии.

Нужно еще и из таблицы comments, т.е. желательно бы чтобы одним масивом отсылать данные и user_site, и user_site.

На данный момент только из таблицы user_site.

Link to comment
Share on other sites

  • 0
Ну либо я что то не понял, короче не работает.

Отсылает пустой массив.

так в том то и дело что так не работает!!

В первый раз было же так, а когда указываешь: либо user_site.*, либо comments.* данные отсылаются но только из одной таблицы!

Link to comment
Share on other sites

  • 0

все спасибо, заработало!!!

ORDER BY id -> ORDER BY comments.id

Огромное спасибо. Честно говоря не знал о таких широких возможностях в SQL запросах...

Уже читаю статейку!

Еще раз спасибо за помощь. :)

Link to comment
Share on other sites

  • 0
все спасибо, заработало!!!

ORDER BY id -> ORDER BY comments.id

Огромное спасибо. Честно говоря не знал о таких широких возможностях в SQL запросах...

Уже читаю статейку!

Еще раз спасибо за помощь. :)

SQL много чего умеет, бойся когда начнешь копать чуть глубже поверхности (:

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy