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

#1 2012.02.17 14:56

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

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

Код:

1
2
3
4
5
6
7
8
9
10
11
12
<?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
Сообщений: 2279
Карма: 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
Сообщений: 2279
Карма: 19
Профиль

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

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

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

Неактивен

#4 2012.02.17 16:21

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

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

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

Неактивен

#5 2012.02.17 16:50

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

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

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

Код:

1
2
3
4
5
6
7
8
9
<?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
Сообщений: 2279
Карма: 19
Профиль

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

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

Код:

1
2
3
4
5
6
7
8
9
10
<?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
Сообщений: 2279
Карма: 19
Профиль

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

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

Неактивен

#8 2012.02.17 22:00

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

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

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

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?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 == || $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 && $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 && $pun_config.o_avatars == && $cur_post.use_avatar == && $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 -->
<class="con">{$paging_links}</p>
 
{if $pun_user.g_post_replies}
<div class="blocktable">
    <strong><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
Сообщений: 6585
Карма: 107
Профиль Веб-сайт

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

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

Неактивен

#10 2012.02.18 12:17

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

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

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

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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/%%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'] > && $pun_config.o_show_post_karma == || $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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
 
foreach ($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'] == || $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.015 s