• Главная
  • » PHP
  • » Smarty на примере модификации форума PunBB

#1 2012.02.17 14:56

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Smarty на примере модификации форума PunBB

Код:

1
span style="color: #0000BB"><?php$posts = $pids = array();while ($cur_post = $db->fetch_assoc($result)) { $posts[] = $cur_post; $pids[] = $cur_post['id'];}$db->free_result($result);//Trololo//Я бы все заменил на $smarty->assign('posts', $db->fetchAll());//Но там везде $posts и $pids используются$smarty->assign('posts', $posts);

Отредактировано tipsun (2012.02.17 16:02)

Неактивен

#2 2012.02.17 15:41

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Smarty на примере модификации форума PunBB

Что делать, если ключ массива задан с пробелом?

Код:

1
2
3
4
{if $quickpost}
<div>
<strong>{$lang_topic['Quick post']}</strong>
</div>

Добавлено спустя   9 минут  7 секунд:
Что-то типа такого можно?

Код:

1
<input type="hidden" name="form_user" value="{$pun_user.username ? $pun_user.username : 'Guest'}" />

Или так надо?

Код:

1
<input type="hidden" name="form_user" value="{if $pun_user.username} {$pun_user.username} {else} Guest {/if}" />

Отредактировано tipsun (2012.02.17 15:51)

Неактивен

#3 2012.02.17 16:09

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Smarty на примере модификации форума PunBB

В файле viewtopic я почти всю разметку занес в шаблон. То, что в гигантском цикле foreach осталось. Все остальное не трогаю.

Отредактировано tipsun (2012.02.17 16:09)

Неактивен

#4 2012.02.17 16:21

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: Smarty на примере модификации форума PunBB

я не помню уже. на счет тернарного оператора.

Неактивен

#5 2012.02.17 16:50

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Smarty на примере модификации форума PunBB

Карма
Не лучше ли сразу?

Код:

1
span style="color: #0000BB"><?php$posts = $pids = array();while ($cur_post = $db->fetch_assoc($result)) { $cur_post['karma'] = $db->fetch_row($db->query('SELECT SUM(`vote`), (SELECT 1 FROM `'.$db->prefix.'karma` WHERE `id`='.$pun_user['id'].' AND `to`='.$cur_post['poster_id'].' LIMIT 1) FROM `'.$db->prefix.'karma` WHERE `to` = '.$cur_post['poster_id'], false));; $posts[] = $cur_post;} $db->free_result($result);//tpl: posts[i].karma[0]//tpl: posts[i].karma[1]

Отредактировано tipsun (2012.02.17 16:51)

Неактивен

#6 2012.02.17 20:31

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Smarty на примере модификации форума PunBB

У меня руки кривые?
Или это проделки самописного MySQLi?
Там посмотрел, видимо сбивает предыдущий запрос.

Код:

1
span style="color: #0000BB"><?php$posts = $pids = array();while ($cur_post = $db->fetch_assoc($result)) { $karma = $db->query('SELECT SUM(`vote`), (SELECT 1 FROM `'.$db->prefix.'karma` WHERE `id`='.$pun_user['id'].' AND `to`='.$cur_post['poster_id'].' LIMIT 1) FROM `'.$db->prefix.'karma` WHERE `to` = '.$cur_post['poster_id'], false) $cur_post['karma'] = $db->fetch_row($karma); $posts[] = $cur_post; $pids[] = $cur_post['id'];}$db->free_result($result);

Отредактировано tipsun (2012.02.18 10:55)

Неактивен

#7 2012.02.17 21:35

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Smarty на примере модификации форума PunBB

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

Неактивен

#8 2012.02.17 22:00

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Smarty на примере модификации форума PunBB

Вот за сегодня чего получилось.
Не добил пока еще sad
Там еще запутанно с выводом для Пользователя и Гостя

Код:

1
span style="color: #0000BB"><?php<!-- viewtopic template --><div class="con"><a href="index.php">{$lang_common.Index}</a> / <a href="viewforum.php?id={$cur_topic.forum_id}">{$cur_topic.forum_name}</a> / {$cur_topic.subject}</div><!-- +FOREACH -->{foreach from=$posts item=$cur_post}<!-- <a href="profile.php?id={$cur_post.poster_id}">{$cur_post.username}</a> --><table class="msg2"> <tr> <td> <div id="p{$cur_post.id}"> <a href="viewtopic.php?pid={$cur_post.id}#p{$cur_post.id}">#{$start_from + $post_count}</a><br/> {format_time($cur_post['posted'])}<br/> <strong>{$username}</strong> {if $pun_config.o_show_post_karma == 1 || $pun_user.g_id < {PUN_GUEST}} {if $pun_user.is_guest || $karma[1]} {$karma[0]} {else} (<a href="karma.php?to={$cur_post.poster_id}&amp;vote=-1&amp;pid={$cur_post.id}">-</a> {$cur_post.karma[0]} <a href="karma.php?to={$cur_post.poster_id}&amp;vote=1&amp;pid={$cur_post.id}">+</a>) {/if} {/if} {if $cur_post.poster_id > 1 && $cur_post.is_online == $cur_post.poster_id} <br/> <span class="green">{$lang_topic.Online}</span> {/if} </div> </td> <!-- user avatar --> {if $cur_post.poster_id > 1 && $pun_config.o_avatars == 1 && $cur_post.use_avatar == 1 && $pun_user.show_avatars} <td> <img src="../{$pun_config.o_avatars_dir}/{$cur_post.poster_id}.gif" alt="*" /> </td> {else} {/if} </tr></table>{/foreach}<!-- -FOREACH --><p class="con">{$paging_links}</p>{if $pun_user.g_post_replies}<div class="blocktable"> <strong><a class="in" href="post.php?tid={$id}">{$lang_topic.`Post reply`}</a></strong></div>{/if}{if $quickpost}<div> <strong>{$lang_topic.`Quick post`}</strong></div><div class="input"> <form method="post" action="post.php?tid={$id}"> <div> <fieldset> <legend>{$lang_common.`Write message legend`}</legend> {if $pun_config.o_antiflood} <input type="hidden" name="form_t" value="{$smarty.server.REQUEST_TIME}" /> <input type="hidden" name="form_sent" value="1" /> <input type="hidden" name="form_user" value="{if $pun_user.username}{$pun_user.username}{else}Guest{/if}" /> {/if} <!-- Ввод имени для гостей --> {if $pun_user.is_guest} {$lang_common.Username}<br/> <input type="text" name="req_username" tabindex="1" /><br/> {/if} <textarea name="req_message" rows="4" cols="24" tabindex="1"></textarea><br/> {if $is_admmod} <input type="checkbox" name="merge" value="1" checked="checked" /> {$lang_post.`Merge posts`} {/if} </fieldset><br/><input type="submit" name="submit" tabindex="2" value="{$lang_common.Submit}" accesskey="s" /> </div> </form></div>{/if}

Отредактировано tipsun (2012.02.17 22:03)

Неактивен

#9 2012.02.18 12:13

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: Smarty на примере модификации форума PunBB

tipsun, я не понял на счет кармы. Покажи как сейчас и что тебе не нравится. Я на память весь код не помню.
Вообще не переживай если код в шаблонах громоздкий получается. Само то, что верстка будет вынесена уже само по себе очень большой плюс.
По поводу разных шаблонов для пользователя и гостя - есть смысл. Но еще же есть модераторы и админы. Там  тоже немного отличается внешний вид.

Неактивен

#10 2012.02.18 12:17

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Smarty на примере модификации форума PunBB

Неправильно я там сделал.
Забыл про условие {if $cur_post.poster_id > 1} надо во все остальные условия подставлять, где эти условия в само условие входили smile
- - - -
Сейчас карму покажу

Код:

1
span style="color: #0000BB"><?php<!-- template -->{foreach from=$posts item=$cur_post}<table class="msg2"> <tr> <td> <div id="p{$cur_post.id}"> <a href="viewtopic.php?pid={$cur_post.id}#p{$cur_post.id}">#{$start_from + $post_count}</a><br/> {$cur_post.posted|date:%d/%m/%y %h:%i:%s}<br/> <!-- User or Guest --> <strong>{if $cur_post.poster_id > 1}<a href="profile.php?id={$cur_post.poster_id}">{$cur_post.username}</a>{else}{$cur_post.username}{/if}</strong> {if $cur_post['poster_id'] > 1 && $pun_config.o_show_post_karma == 1 || $pun_user.g_id < {PUN_GUEST}} {if $pun_user.is_guest || $karma[1]} {$cur_post.karma[0]} {else} (<a href="karma.php?to={$cur_post.poster_id}&amp;vote=-1&amp;pid={$cur_post.id}">-</a> {$cur_post.karma[0]} <a href="karma.php?to={$cur_post.poster_id}&amp;vote=1&amp;pid={$cur_post.id}">+</a>) {/if} {/if}

* * * *
Чтоб её узнать, надо запрос из шаблона делать или в логике пройтись по готовому массиву с сообщениями и определить карму.

Код:

1
span style="color: #0000BB"><?phpforeach ($posts as $cur_post) { $post_count++; $signature = $is_online = $user_avatar = ''; $post_actions = $user_contacts = $user_info = array(); // If the poster is a registered user. $karma = ''; if ($cur_post['poster_id'] > 1) { if ($pun_config['o_show_post_karma'] == 1 || $pun_user['g_id'] < PUN_GUEST) { $karma = $db->fetch_row($db->query('SELECT SUM(`vote`), (SELECT 1 FROM `'.$db->prefix.'karma` WHERE `id`='.$pun_user['id'].' AND `to`='.$cur_post['poster_id'].' LIMIT 1) FROM `'.$db->prefix.'karma` WHERE `to` = '.$cur_post['poster_id'], false)); $karma[0] = intval($karma[0]); if ($pun_user['is_guest'] || $karma[1]) { $karma = ' ('.$karma[0].')'; } else { $karma = ' ('.$karma[0].') <a href="karma.php?to='.$cur_post['poster_id'].'&amp;vote=1&amp;pid='.$cur_post['id'].'">+</a>/<a href="karma.php?to='.$cur_post['poster_id'].'&amp;vote=-1&amp;pid='.$cur_post['id'].'">-</a>'; } }

Добавлено спустя   6 минут  45 секунд:
У меня пока там ошибки и т.д. Потом когда полностью готов шаблон будет, уже можно будет отладить.
Вообщем насчет кармы:
Там сначала посты через цикл вытаскиваются, потом через второй цикл определяется карма каждого постера.
Удобней было бы сразу в одном цикле это сделать и потом в шаблоне через цикл вывести без всяко запросов.

Отредактировано tipsun (2012.02.18 12:35)

Неактивен

  • Главная
  • » PHP
  • » Smarty на примере модификации форума PunBB

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.025 s