tipsun » 2012.02.17 14:56

Код:

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 15:41

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

Код:

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 16:09

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

Gemorroj » 2012.02.17 16:21

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

tipsun » 2012.02.17 16:50

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

Код:

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 20:31

У меня руки кривые?
Или это проделки самописного 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.17 21:35

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

tipsun » 2012.02.17 22:00

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

Код:

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}
Gemorroj » 2012.02.18 12:13

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

tipsun » 2012.02.18 12:17

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

Код:

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 15:21

Не хочет ничего показывать, почему?

Код:

1
span style="color: #0000BB"><?phpdefine('SMARTY_DIR', PUN_ROOT . 'plugins/Smarty/');require_once(SMARTY_DIR . 'Smarty.class.php');$smarty = new Smarty();$smarty->template_dir = PUN_ROOT . 'themes/wap/templates/';$smarty->compile_dir = PUN_ROOT . 'themes/wap/compile/';$smarty->config_dir = PUN_ROOT . 'themes/wap/configs/';$smarty->cache_dir = PUN_ROOT . 'themes/wap/cache/';$smarty->assign('paging_links', $paging_links);$smarty->assign('posts', $paging_links);$smarty->assign('pun_config', $pun_config);$smarty->assign('pun_user', $pun_user);$smarty->assign('posts', $posts);//$smarty->debugging = true;$smarty->display('viewtopic.tpl');
tipsun » 2012.02.18 17:46

Так видно что класс загрузился.

Код:

1
span style="color: #0000BB"><?phpvar_dump($smarty);

Добавлено спустя   6 минут  33 секунды:
А, шаблон битый. Неправильно что-то написал.
Другой, простой-тестовый, загрузило-показало.

tipsun » 2012.02.18 18:03

Короче массивы с ключами, содержащими пробелы надо писать как обычно, видимо.

Код:

1
{$lang_topic['Quick post']}
tipsun » 2012.02.18 18:56

Ну сейчас совсем другое дело. Вживую собирать (смотреть на результат) гораздо приятнее :)
Хоть видно, что вроде получается.

tipsun » 2012.02.18 19:33

Я вот подумал, зачем я тогда время трачу на обработку этих $cur_post['edit'] -> $cur_post.edit
Может как есть оставлять?

tipsun » 2012.02.18 21:03

За сегодня.
Ошибок в компиляции нет.
Пропустил некоторые функции типа антиспам, счетчик сообщений, сигнатура итд.

Код:

1
span style="color: #0000BB"><?php{include file='header.tpl'}<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 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_format:"%d/%m/%y %H:%I:%S"}<br/> <strong> <!-- Name --> {if $cur_post.poster_id > 1} <a href="profile.php?id={$cur_post.poster_id}">{$cur_post.username}</a> {else} {$cur_post.username} {/if} {if $cur_post.poster_id > 1} {if $pun_config.o_show_post_karma == 1 || $pun_user.g_id < $smarty.const.PUN_GUEST} {if $pun_user.is_guest || $cur_post.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} {/if} </strong> {if $cur_post.poster_id > 1 && $cur_post.is_online == $cur_post.poster_id} <b>On</b> {else} Off {/if} </div> </td> {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="Avatar" /> </td> {/if} </tr></table><table class="msg"> <tr> <td>{$cur_post.message}</td> </tr> <tr> <td> <!-- Antispam missing --> {if $cur_post.edited} <div> <em>{$lang_topic['Last edit']} {$cur_post.edited_by} ({$cur_post.edited|date_format:"%d/%m/%y %H:%I:%S"})</em> </div> {/if} {if $signature} <div> <hr />{$signature} </div> {/if} </td> </tr></table><div class="con">{if ! $is_admmod} {if ! $cur_topic.closed} {if $cur_post.poster_id == $pun_user.id} {if (($start_from + $post_count) == 1 && $pun_user.g_delete_topics == 1) || (($start_from + $post_count) > 1 && $pun_user.g_delete_posts == 1)} <a href="delete.php?id={$cur_post.id}">{$lang_topic.Delete}</a> {/if} {if $pun_user.g_edit_posts == 1} <a href="edit.php?id={$cur_post.id}">{$lang_topic.Edit}</a> {/if} {/if} {if (! $cur_topic.post_replies && $pun_user.g_post_replies == 1) || $cur_topic.post_replies == 1} <a href="post.php?tid={$id}&amp;qid={$cur_post.id}">{$lang_topic['Post reply']}</a> {/if} {/if}{else} <a href="delete.php?id={$cur_post.id}">{$lang_topic.Delete}</a><br/> <a href="edit.php?id={$cur_post.id}">{$lang_topic.Edit}</a><br/> <a href="post.php?tid={$id}&amp;qid={$cur_post.id}">{$lang_topic['Post reply']}</a>{/if}</div>{/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.is_guest}{$pun_user.username}{else}Guest{/if}" /> {/if} <!-- +Guest name --> {if $pun_user.is_guest} {$lang_common.Username}<br/> <input type="text" name="req_username" tabindex="1" /><br/> {/if} <!-- -Guest name --> <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}{include file='footer.tpl'}
Gemorroj » 2012.02.18 23:20

tipsun, а ты откуда форум брал-то...? что-то у меня подозрение что ты его не из свн брал?

tipsun » 2012.02.18 23:21

Нет. На свн ссылки нет. Я отсюда (вапинет-скрипты) взял.
Добавлено спустя   1 минуту  13 секунд:
Я вообще думал присоединиться туда, но чет не разобрался как.

Gemorroj » 2012.02.18 23:25

tipsun, ох блин... придется тебе переписывать код..)
давай присоединяйся к командной разработке в свн.
Добавлено спустя    55 секунд:
ссылка на репозиторий тут в 1 посте http://wapinet.ru/forum/viewtopic.php?id=69

tipsun » 2012.02.19 11:00

$pun_user.g_id - такой синтаксис ведь не обязателен?
$pun_user['g_id'] - можно же как обычно?

Gemorroj » 2012.02.19 11:36

на сколько я помню, желателен именно $pun_user.g_id

tipsun » 2012.02.19 11:41

Ок. Но с пробелами ключи придется писать так: $lang_pack['tro lolo']

Gemorroj » 2012.02.19 12:35

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

Код:

1
2
{assign var=index value="tro lolo"}
$lang_pack.$index
tipsun » 2012.02.19 12:45

Ок. Спс.

tipsun » 2012.02.19 13:50

Скачал форум.
Добавлено спустя   4 минуты  13 секунд:

Код:

1
span style="color: #0000BB"><?php if ($cur_post['poster_id'] > 1) { if ($pun_config['o_avatars'] == 1 && $cur_post['use_avatar'] == 1 && $pun_user['show_avatars']) { if ($img_size = @getimagesize('../'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.gif')) { $user_avatar = '<img src="../'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.gif" alt="*" />'; } else if ($img_size = @getimagesize('../'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.jpg')) { $user_avatar = '<img src="../'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.jpg" alt="*" />'; } else if ($img_size = @getimagesize('../'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.png')) { $user_avatar = '<img src="../'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.png" alt="*" />'; } } else { $user_avatar = ''; } }

Код:

1
2
3
4
5
<!-- +Avatar -->
{if $cur_post.poster_id > 1 and $pun_config.o_avatars == 1 && $cur_post.use_avatar == 1 && $pun_user.show_avatars}
<img src="../{$pun_config.o_avatars_dir}/{$cur_post.poster_id}.gif" alt="*" />
{/if}
<!-- -Avatar -->
tipsun » 2012.02.19 16:53

Фух. Там только интимные места остались. :D

Gemorroj » 2012.02.19 16:57

расскажи вообще про структуру, как ты смарти прикручиваешь

tipsun » 2012.02.19 17:56

Я пока просто шаблоны делаю.
Я только вчера со smarty познакомился, а тут уже структура итд :)

tipsun » 2012.02.20 13:52

Gemorroj, Если я выложу код на SVN, то могу случайно что-то заменить? После чего невозможно будет это восстановить?

Gemorroj » 2012.02.20 13:54

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

tipsun » 2012.02.20 14:00

В архиве все.

Gemorroj » 2012.02.20 15:19

эм нет. в папке include/template есть уже несколько шаблонов, нужно развивать их там дальше.
сам Smarty тоже стоит положить в includes. themes положить в include/template

tipsun » 2012.02.20 15:46

Это получится так типа:

- include/template/themes/THEME_NAME/templates/TPL_NAME.tpl
- include/template/themes/THEME_NAME/compiled/~
- include/template/themes/THEME_NAME/cache/~
- include/template/themes/THEME_NAME/configs/~
- include/template/themes/THEME_NAME/style.css

Gemorroj » 2012.02.20 15:48

еще даже можно, наверн в themes 2 подпапки добавить wap и web и в них ложить темы для того и другого отдельно

tipsun » 2012.02.20 15:50

Ок.
Я в dcms видел, что они просто префикс добавляли: "wap_", "pda_", "web_".
Поэтому думал, может так и сделать.
Добавлено спустя   6 минут  26 секунд:
Еще надо будет в верстке указывать (через переменную можно):

Код:

1
span style="color: #0000BB"><?php$smarty->template_dir = PUN_ROOT . 'include/template/themes/wap/' . $pun_user['style_wap'] . '/tpls/';$smarty->compile_dir = PUN_ROOT . 'include/template/themes/wap/' . $pun_user['style_wap'] . '/compiled/';$smarty->config_dir = PUN_ROOT . 'include/template/themes/wap/' . $pun_user['style_wap'] . '/configs/';$smarty->cache_dir = PUN_ROOT . 'include/template/themes/wap/' . $pun_user['style_wap'] . '/cache/';/*$smarty->template_dir = PUN_ROOT . 'include/template/themes/' . $pun_user['style_wap'] . '/tpls/';$smarty->compile_dir = PUN_ROOT . 'include/template/themes/' . $pun_user['style_wap'] . '/compiled/';$smarty->config_dir = PUN_ROOT . 'include/template/themes/' . $pun_user['style_wap'] . '/configs/';$smarty->cache_dir = PUN_ROOT . 'include/template/themes/' . $pun_user['style_wap'] . '/cache/';*///<!-- +TEMPLATE --> <head> <title>{$page_title|escape}</title> <link rel="stylesheet" type="text/css" href="/include/template/themes/wap/{$pun_user.style_wap}/style.css" /> //<!-- <link rel="stylesheet" type="text/css" href="/include/template/themes/{$pun_user.style_wap}/style.css" /> --> </head>//<!-- -TEMPLATE -->
tipsun » 2012.02.20 16:18

А если включить мозги, то так можно:

Код:

1
span style="color: #0000BB"><?php//без слеша впереди, потом можно добавить в "подключении" css.define('THEME_DIR', 'include/template/themes/wap/' . $pun_user['style_wap'] . '/');$smarty->template_dir = PUN_ROOT . THEME_DIR . '/tpls/';$smarty->compile_dir = PUN_ROOT . THEME_DIR . '/compiled/';$smarty->config_dir = PUN_ROOT . THEME_DIR . '/configs/';$smarty->cache_dir = PUN_ROOT . THEME_DIR . '/cache/';/* HTML<link rel="stylesheet" type="text/css" href="/{$smarty.const.THEME_DIR}/style.css" />*/
tipsun » 2012.02.20 16:45

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

Код:

1
span style="color: #0000BB"><?php//Пост должен содержать типа такого.$cur_post['karma']['val'] = 'integer karma'; if ($pun_config['o_show_post_karma'] == 1 || $pun_user['g_id'] < PUN_GUEST) { $q = $db->fetch_row($db->query(' SELECT COUNT(1), (SELECT COUNT(1) FROM `' . $db->prefix . 'karma` WHERE `vote` = "-1" AND `to` = ' . $cur_post['poster_id'] . ') FROM `' . $db->prefix . 'karma` WHERE `vote` = "1" AND `to` = ' . $cur_post['poster_id'] )); $karma['plus'] = intval($q[0]); $karma['minus'] = intval($q[1]); $karma['karma'] = $karma['plus'] - $karma['minus']; unset($q); if ($pun_user['is_guest']) { $karma = ' (' . $karma['karma'] . ')'; } else if ($db->num_rows($db->query('SELECT 1 FROM `' . $db->prefix . 'karma` WHERE `id`=' . $pun_user['id'] . ' AND `to`=' . $cur_post['poster_id'] . ' LIMIT 1'))) { $karma = ' (' . $karma['karma'] . ')'; } else { $karma = ' (' . $karma['karma'] . ') <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>'; } } //Template //<!-- +Karma --> {if $cur_post.karma.val and $pun_config.o_show_post_karma == 1 || $pun_user.g_id < $smarty.const.PUN_GUEST} &#160;({$cur_post.karma.val}) {if ! $pun_user.is_guest} &#160;<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> {/if} {/if} //<!-- -Karma -->
tipsun » 2012.02.20 16:57

Нет, надо было оставить "used".

$cur_post['karma']['val'] - значение кармы
$cur_post['karma']['used'] - уже ставил этому пользователю, если ставил, то задать true.

Вот короче:

Код:

1
2
3
4
5
6
7
8
9
//Template
//<!-- +Karma -->
{if $pun_config.o_show_post_karma == 1 || $pun_user.g_id < $smarty.const.PUN_GUEST}
 ({$cur_post.karma.val})
{if ! $pun_user.is_guest and ! $cur_post.karma.used}
 <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>
{/if}
{/if}
//<!-- -Karma -->
tipsun » 2012.02.20 17:08

Сейчас еще вытащу все assign с цикла шаблона :D Я сначала даже и не подумал.
Добавлено спустя   6 минут  30 секунд:
Осталось: карма, аватарка и еще

Код:

1
span style="color: #0000BB"><?php// Can we or can we not post replies?if (!$cur_topic['closed']) { if ((!$cur_topic['post_replies'] && ($pun_user['g_post_replies'] == 1 || $pun_user['g_post_replies'] == 2)) || $cur_topic['post_replies'] == 1 || $is_admmod) { $post_link = '<a href="post.php?tid='.$id.'">'.$lang_topic['Post reply'].'</a>'; } else { $post_link = '&#160;'; }} else { $post_link = $lang_topic['Topic closed']; if ($is_admmod) { $post_link .= ' / <a href="post.php?tid='.$id.'">'.$lang_topic['Post reply'].'</a>'; }}if (!$pun_user['is_guest'] && $pun_config['o_subscriptions'] == 1) { if ($cur_topic['is_subscribed']) { // I apologize for the variable naming here. It's a mix of subscription and action I guess :-) $subscraction = '<div class="con">'.$lang_topic['Is subscribed'].' - <a href="misc.php?unsubscribe='.$id.'">'.$lang_topic['Unsubscribe'].'</a></div>'; } else { $subscraction = '<div class="con"><a href="misc.php?subscribe='.$id.'">'.$lang_topic['Subscribe'].'</a></div>'; }} else { $subscraction = null;} // Switch the background color for every message. $bg_switch = !$bg_switch; $vtbg = ($bg_switch) ? ' roweven' : ' rowodd'; // Perform the main parsing of the message (BBCode, smilies, censor words etc) $cur_post['message'] = parse_message($cur_post['message'], $cur_post['hide_smilies'], $cur_post['id']); // Do signature parsing/caching if ($cur_post['signature'] && $pun_user['show_sig']) { if (isset($signature_cache[$cur_post['poster_id']])) { $signature = $signature_cache[$cur_post['poster_id']]; } else { $signature = parse_signature($cur_post['signature']); $signature_cache[$cur_post['poster_id']] = $signature; } } $save_attachments = $attachments; $attachments = array_filter($attachments, 'filter_attachments_of_post'); if ($attachments) { include PUN_ROOT.'include/attach/wap_view_attachments.php'; } $attachments = $save_attachments; if ($is_admmod) { if (isset($cur_post['spam_id'])) { include_once PUN_ROOT . 'lang/' . $pun_user['language'] . '/misc.php'; echo '<br/>'.$lang_misc['Antispam pattern'].' - '.pun_htmlspecialchars($cur_post['pattern']).'<br /><a href="./antispam_misc.php?action=allow&amp;id='.$cur_post['spam_id'].'">'.$lang_misc['Antispam tread'].'</a> | <a href="./antispam_misc.php?action=deny&amp;id='.$cur_post['spam_id'].'">'.$lang_misc['Antispam del'].'</a><br />'; } }if ($cur_post['signature'] && $pun_user['show_sig']) { if (isset($signature_cache[$cur_post['poster_id']])) { $signature = $signature_cache[$cur_post['poster_id']]; } else { $signature = parse_signature($cur_post['signature']); $signature_cache[$cur_post['poster_id']] = $signature; } }
tipsun » 2012.02.20 17:38

Пойду отдыхать, а то глаза уже болят...
Добавлено спустя   8 минут  41 секунду:

tipsun написал:

А если включить мозги, то так можно:

Код:

1
span style="color: #0000BB"><?php//без слеша впереди, потом можно добавить в "подключении" css.define('THEME_DIR', 'include/template/themes/wap/' . $pun_user['style_wap'] . '/');$smarty->template_dir = PUN_ROOT . THEME_DIR . '/tpls/';$smarty->compile_dir = PUN_ROOT . THEME_DIR . '/compiled/';$smarty->config_dir = PUN_ROOT . THEME_DIR . '/configs/';$smarty->cache_dir = PUN_ROOT . THEME_DIR . '/cache/';/* HTML<link rel="stylesheet" type="text/css" href="/{$smarty.const.THEME_DIR}/style.css" />*/

А если этими мозгами еще подумать, то:

Код:

1
span style="color: #0000BB"><?phpdefine('THEME_DIR', PUN_ROOT . 'include/template/themes/wap/' . $pun_user['style_wap'] . '/');$smarty->template_dir = THEME_DIR . '/tpls/';$smarty->compile_dir = THEME_DIR . '/compiled/';$smarty->config_dir = THEME_DIR . '/configs/';$smarty->cache_dir = THEME_DIR . '/cache/';////<link rel="stylesheet" type="text/css" href="{$smarty.const.THEME_DIR}/style.css" />//
tipsun » 2012.02.20 21:37

Где-то я видел регистрация_функции() в смарти.
Еще чего подумал.
Ну допустим есть у нас некоторые исключения, при которых надо перенаправить пользователя, или оборвать выполнение скрипта.
Если в самом начале запускать смарти, то оно как бы лишний раз запускается.
А если все будет нормально, + кеш-смарти. То наоборот выигрышный запуск в самом начале, не?
Правда там еще этот смарти проверить должен, изменились ли данные или нет, чтоб выдать кеш-шаблон или вновь компилируемый, не?
Или при компиляции смарти приводит шаблон в нативный вид?
* А из нативного в статичный уже.

tipsun » 2012.02.20 22:27

tipsun, ну диагноз ясен.
Так же наблюдается синдром Флудераста.
Принимайте google 3 раза в день. И все пройдет. :D

tipsun » 2012.02.20 22:49

Там она все параметры в массив складывает, как я понял.
Это значит саму функцию тоже менять придется?

Код:

1
span style="color: #0000BB"><?php$smarty->register_function("date_now", "print_current_date");function print_current_date($params){ if(empty($params['format'])) { $format = "%b %e, %Y"; } else { $format = $params['format']; return strftime($format,time()); }}// теперь вы можете использовать ее в Smarty чтобы вывести текущую дату: {date_now}// или {date_now format="%Y/%m/%d"} чтобы задать формат.
Gemorroj » 2012.02.21 11:47

tipsun, про скорость пока не задумывайся, доделаем.
на счет твоей функции, у смарти уже вроде есть готовые функции для работы с датой. почитай мануал по этому поводу. и желательно по 3 версии

tipsun » 2012.02.21 15:29

Я не про дату, про дату я читал :)

Код:

1
2
3
4
5
{$var|date_format:'%d/%m/%y %H:%I:%S'}
 
еще про default посмотрел (когда переменная не содержит значения, то выводится по умол.)
Ну, по ситуации, заглядываю в мануал, бывает =)
{$var|default:'no value'}

. . . .

Я про $smarty->register_function();

. . . .

Gemorroj » 2012.02.21 16:14

я по моему такой штукой даже и не пользовался.

tipsun » 2012.02.21 21:44

А как быть с пользовательскими функциями и инклудами?

tipsun » 2012.02.21 22:51

Если я ничего не упустил, то остался в файле wap/viewtopic.php только этот код: #39.
Там вроде случайно повторился.
Еще посмотрел стандартные шаблоны: include/template/
Там как бы совсем общее.
Ну я несколько раз смотрел, пытался собрать верх header.tpl и низ footer.tpl
Там например была ссылка на rss новости, указание кодировки, я сразу подставлял то, что по default идет из массива-источника.
Есть немного, но в правильности не уверен, еще раз буду смотреть, искать что упустил.

Gemorroj » 2012.02.21 22:55

главное чтобы архитектура правильно выстроена была)
Добавлено спустя   1 минуту  6 секунд:
кстати, сегодня Smarty 3.1.8 вышел

tipsun » 2012.02.21 23:03

Надо наверно все-таки мануал 3 на англ. смотреть и переводить. Пользоваться 3, а мануал за 2 смотреть - не логично :)
Добавлено спустя   5 минут  9 секунд:

tipsun написал:

Там как бы совсем общее.

И там для вап только wap_main.tpl
Остальное для веб вроде.
Добавлено спустя   7 минут  57 секунд:

Код:

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
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset={$lang_common.lang_encoding}" />
<title>{$page_title|escape}</title>
<link rel="stylesheet" type="text/css" href="{$smarty.const.THEME_DIR}/style.css" />
<link rel="alternate" type="application/rss+xml" title="{$pun_config.o_board_title}" href="{$smarty.const.PUN_ROOT}rss.xml" />
</head>
<body>
<div class="hd">
<img src="{$smarty.const.THEME_DIR}/imgs/logo.gif" title="{$lang_common.Forum} {$smarty.server.HTTP_HOST}" alt="{$lang_common.Forum} {$smarty.server.HTTP_HOST}" />
</div>
<div class="hd_bott">
{$pun_config.o_board_desc}
</div>
<div class="in">
<div>
-<a href="/rss.xml">RSS</a>
<a href="{$smarty.const.PUN_ROOT}rss.xml">RSS</a>
</div>
</div>
<div class="incqbox">
{$lang_common.Announcement}
</div>
<div class="msg">
{$pun_config.o_announcement_message}
</div>
tipsun » 2012.02.21 23:25

Ну это просто набросок. Там еще условия итд.

tipsun » 2012.02.22 00:15

Код:

1
span style="color: #0000BB"><?php//<!-- TPL -->/*<?xml version="1.0" encoding="UTF-8"?>*/<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru"> <head> <meta http-equiv="Expires" content="Thu, 21 Jul 1977 07:30:00 GMT" /> <meta http-equiv="Last-Modified" content="{$smarty.now|date_format:'r'} GMT" /> <meta http-equiv="Cache-Control" content="post-check=0, pre-check=0" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Content-Type" content="text/html; charset={$lang_common.lang_encoding}" /> <title>{$page_title|escape}</title> <link rel="stylesheet" type="text/css" href="{$smarty.const.THEME_DIR}style.css" /> <link rel="alternate" type="application/rss+xml" title="{$pun_config.o_board_title}" href="{$smarty.const.PUN_ROOT}rss.xml" /> </head> <body> {if $basename == 'index.php'} <div class="hd"> <img src="{$smarty.const.THEME_DIR}/imgs/logo.gif" title="{$lang_common.Forum} {$smarty.server.HTTP_HOST}" alt="{$lang_common.Forum} {$smarty.server.HTTP_HOST}" /> </div> {if $pun_config.o_board_desc} <div class="hd_bott"> {$pun_config.o_board_desc} </div> {/if} {if $pun_user.is_guest} {assign var='Not_logged_in' value='Not logged in'} <div class="con"> {$lang_common.$Not_logged_in} </div> {/if} {if $pun_user.g_id < $smarty.const.PUN_GUEST} {* $result_header = $db->query('SELECT COUNT(1) FROM `' . $db->prefix . 'reports` WHERE `zapped` IS NULL') or error('Unable to fetch reports info', __FILE__, __LINE__, $db->error()); if ($db->result($result_header)) { $tpl_temp .= '<div class="con"><a href="' . PUN_ROOT . 'admin_reports.php">' . $lang_admin['New reports'] . '</a></div>'; } *} {if $pun_config.o_maintenance == 1} <div class="con"> <a href="{$smarty.const.PUN_ROOT}admin_options.php#maintenance">{$lang_admin.maintenance}</a> </div> {/if} {/if} {/if} <div class="in"> <div> <a href="{$smarty.const.PUN_ROOT}rss.xml">RSS</a> </div> </div> {if $basename == 'index.php' && $pun_config.o_announcement == 1} <div class="incqbox"> {$lang_common.Announcement} </div> <div class="msg"> {$pun_config.o_announcement_message} </div> {/if} {if $basename == 'profile.php' || $basename == 'search.php' || $basename == 'userlist.php' || $basename == 'message_list.php' || $basename == 'message_send.php' || $basename == 'message_delete.php' || $basename == 'misc.php' || $basename == 'filemap.php' || $basename == 'karma.php'} <div class="inbox"> <a href="index.php">{$lang_common.Index}</a> </div> {/if}

Добавлено спустя   8 минут  48 секунд:
Вроде есть в самой смарти: $smarty.server.PHP_SELF

tipsun » 2012.02.22 00:36

Можно задать $basename с логики, в принципе. baseName($_SERVER['PHP_SELF']);
Еще там если определена переменная PUN_HELP то грузиться шаблон include/template/help.tpl - я пока пропустил.
И еще там были интимные места, я пропустил.

Код:

1
span style="color: #0000BB"><?php// Load the templateif (defined('PUN_HELP')) { $tpl_main = file_get_contents(PUN_ROOT . 'include/template/help.tpl');} else { $tpl_main = file_get_contents(PUN_ROOT . 'include/template/wap_main.tpl');}// START SUBST - <pun_include "*">while (preg_match('#<pun_include "([^/\\\\]*?)\.(php[45]?|inc|html?|txt)">#', $tpl_main, $cur_include)) { if (!file_exists(PUN_ROOT . 'include/user/' . $cur_include[1] . '.' . $cur_include[2])) { error('Unable to process user include ' . htmlspecialchars($cur_include[0]) . ' from template main.tpl. There is no such file in folder /include/user/', __FILE__, __LINE__); } ob_start(); include_once PUN_ROOT . 'include/user/' . $cur_include[1] . '.' . $cur_include[2]; $tpl_temp = ob_get_contents(); $tpl_main = str_replace($cur_include[0], $tpl_temp, $tpl_main); ob_end_clean();}// END SUBST - <body>if (isset($hint_box)) { $tpl_temp = $hint_box;} else { $tpl_temp = null;}if ($pun_user['g_id'] < PUN_GUEST) { $result_header = $db->query('SELECT COUNT(1) FROM `' . $db->prefix . 'reports` WHERE `zapped` IS NULL') or error('Unable to fetch reports info', __FILE__, __LINE__, $db->error()); if ($db->result($result_header)) { $tpl_temp .= '<div class="con"><a href="' . PUN_ROOT . 'admin_reports.php">' . $lang_admin['New reports'] . '</a></div>'; } //это условие не пропустил + в начале if ($pun_user['g_id'] < PUN_GUEST) { if ($pun_config['o_maintenance'] == 1) { $tpl_temp .= '<div class="con"><a href="' . PUN_ROOT . 'admin_options.php#maintenance">' . $lang_admin['maintenance'] . '</a></div>'; }}// PMS MOD BEGINrequire PUN_ROOT . 'include/pms/wap_header_new_messages.php';// PMS MOD END
tipsun » 2012.02.22 00:56

Я спать валю. :)

Код:

1
span style="color: #0000BB"><?php{assign var='Moderate_forum' value='Moderate forum'}{assign var='Delete_posts' value='Delete posts'}{assign var='Move_topic' value='Move topic'}{assign var='Open_topic' value='Open topic'}{assign var='Close_topic' value='Close topic'}{assign var='Unstick_topic' value='Unstick topic'}{assign var='Stick_topic' value='Stick topic'}{assign var='Link_separator_m' value='Link separator_m'}{*if ($basename == 'profile.php' || $basename == 'search.php' || $basename == 'userlist.php' || $basename == 'uploads.php' || $basename == 'message_list.php' || $basename == 'message_send.php' || $basename == 'help.php' || $basename == 'misc.php' || $basename == 'filemap.php' || $basename == 'karma.php') { echo '<div class="navlinks">'.generate_wap_navlinks().'</div>';}} else if ($footer_style == 'viewforum' || $footer_style == 'viewtopic') { // Display the "Jump to" drop list if ($pun_config['o_quickjump'] == 1) { // Load cached quickjump // included quickjump @include PUN_ROOT . 'cache/cache_wap_quickjump_' . $forum_id . '.php'; if (!defined('PUN_QJ_LOADED')) { include PUN_ROOT . 'include/cache.php'; generate_wap_quickjump_cache($forum_id); include PUN_ROOT.'cache/cache_wap_quickjump_' . $forum_id . '.php'; } }*}{if $is_admmod} {if $footer_style == 'viewforum'} <div class="con"> <a class="but" href="moderate.php?fid={$forum_id}&amp;p={$p}">{$lang_common.$Moderate_forum}</a> </div> {elseif $footer_style == 'viewtopic'} <div class="con"> <span class="sub"> <a href="moderate.php?fid={$forum_id}&amp;tid={$id}&amp;p={$p}">{$lang_common.$Delete_posts}</a>{$lang_topic.$Link_separator_m} <a href="moderate.php?fid={$forum_id}&amp;move_topics={$id}">{$lang_common.$Move_topic}</a> {if $cur_topic.closed == 1} {$lang_topic.$Link_separator_m}<a href="moderate.php?fid={$forum_id}&amp;open={$id}">{$lang_common.$Open_topic}</a> {else} {$lang_topic.$Link_separator_m}<a href="moderate.php?fid={$forum_id}&amp;close={$id}">{$lang_common.$Close_topic}</a> {/if} {if $cur_topic.sticky == 1} {$lang_topic.$Link_separator_m}<a href="moderate.php?fid={$forum_id}&amp;unstick={$id}">{$lang_common.$Unstick_topic}</a> {else} {$lang_topic.$Link_separator_m}<a href="moderate.php?fid={$forum_id}&amp;stick={$id}">{$lang_common.$Stick_topic}</a> {/if} </span> </div> {/if}{/if}<div class="foot"> <a href="/">{$smarty.server.HTTP_HOST}</a><br/> <a class="red" href="{$smarty.const.PUN_ROOT}">WEB</a></div><div class="copy"> <a href="http://wapinet.ru/forum/wap/">PunBB Mod Gemorroj</a><br/> <span class="red">{sprintf('%.3f', microtime(true) - $pun_start)} s</span></div></body></html>
tipsun » 2012.02.22 15:12

Еще про подпись юзера забыл.

tipsun » 2012.02.22 16:19

Исключительно слово "лес" полностью описывает ситуацию, сложившуюся в данном коде.
Куда бы ты не ходил, возвращаешься на тоже место.
generate_wap_navlinks()

Код:

1
span style="color: #0000BB"><?php // Index and Userlist should always be displayed $links['userlist.php'] = $lang_common['User list']; if ($pun_config['o_rules'] == 1) { $links['misc.php?action=rules'] = $lang_common['Rules']; } if ($pun_user['is_guest']) { if ($pun_user['g_search'] == 1) { $links['search.php'] = $lang_common['Search']; } if ($pun_config['uploads_conf'][$pun_user['group_id']]) { $links['uploads.php'] = $lang_common['Uploader']; } $info = $lang_common['Not logged in']; } else { if ($pun_user['g_id'] > PUN_MOD) { if ($pun_user['g_search'] == 1) { $links['search.php'] = $lang_common['Search']; } if ($pun_config['uploads_conf'][$pun_user['group_id']]) { $links['uploads.php'] = $lang_common['Uploader']; } $links['filemap.php'] = $lang_common['Attachments']; } else { $links['search.php'] = $lang_common['Search']; $links['uploads.php'] = $lang_common['Uploader']; $links['filemap.php'] = $lang_common['Attachments']; } // PMS MOD END }

Код:

1
span style="color: #0000BB"><?php//Я не разобрался, сделал так.//<!-- TPL --> <div class="navlinks"> {* // Index and Userlist should always be displayed *} <a href="userlist.php">{$lang_common.$User_list}</a> {if $pun_config.o_rules == 1} {$lang_topic.$Link_separator_m}<a href="misc.php?action=rules">{$lang_common.Rules}</a> {/if} {if $pun_user.g_search == 1 and $pun_user.g_id > $smarty.const.PUN_MOD} {$lang_topic.$Link_separator_m}<a href="search.php">{$lang_common.Search}</a> {/if} {if ! $pun_user.is_guest} {$lang_topic.$Link_separator_m}<a href="uploads.php">{$lang_common.Uploader}</a> {$lang_topic.$Link_separator_m}<a href="filemap.php">{$lang_common.Attachments}</a> {/if} </div>
tipsun » 2012.02.22 16:31

Вид: "Пользователи |Поиск |Загрузки |Вложения "
Если так не нравится, можно переделать как было (в форме)

tipsun » 2012.02.22 21:24

Мдэ :( $att_info
И таких моментов не мало.

Код:

1
span style="color: #0000BB"><?php if ($can_download) { echo $check . '<a href="' . $pun_config['o_base_url'] . '/download.php?aid=' . $aid . '">' . $title . '</a> ' . $att_info; } else { echo '<span class="red">' . $title . '</span> ' . $att_info; }
tipsun » 2012.02.22 22:50

Чет я не понял, как система вложений работает.
Вроде все прозрачно. Но не пашет, когда //$attachments = $save_attachments.

Код:

1
span style="color: #0000BB"><?php//TEMPLATE{if $attachments}<div class="attach_list"> <strong>{$lang_fu.Attachments}</strong><br/> {* foreach from=$attachments item=attachment *} {if $can_download} {if $basename == 'edit.php'} <input type="checkbox" name="delete_image[]" value="{$attachment.id}" /> {$lang_fu.$Mark_to_Delete} {/if} <a href="{$pun_config.o_base_url}/download.php?aid={$attachment.id}">{$attachment.filename|escape}</a> {else} <span class="red">{$attachment.filename|escape}</span> {/if} {if $attachment.size >= 1048576} {round($attachment.size / 1048576, 0)} mb {else} {round($attachment.size / 1024, 0)} kb {/if} {if 'image' == strTok($attachment.mime, '/')} , {strtok('/')} {$attachment.image_dim} {/if} [<strong>{$lang_fu.Downloads}: {$attachment.downloads}</strong>]<br/> {* /foreach *}</div>{/if}
tipsun » 2012.02.22 23:07

wap/viewtopic.php
include 'include/attach/fetch.php';
вроде как инфа должна находиться в $attachments
еще там нашел в файле
include 'include/file_upload.php'; - вроде
есть функция в самом конце, чет типа attach_filter_of_post
...
Или это все вообще не с аттачмента берется, а с самого cur_post тогда, что-ли может.

tipsun » 2012.02.22 23:29

А вообще, потихоньку, чище становится там :)

tipsun » 2012.02.22 23:59

А епт. Я же файл свой переименовал, вот и не работало.

Код:

1
span style="color: #0000BB"><?php//dir: 'include/attach/fetch.php'// there are different sources to include fetch.phpswitch (baseName($_SERVER['PHP_SELF'])) { case 'viewforum.php': // not implemented yet break; //case 'mod.viewtopic.php': case 'viewtopic.php': $att_sql = 'SELECT * FROM ' . $db->prefix . 'attachments WHERE topic_id=' . intval($id) . ' AND post_id in (' . implode(',', $pids) . ')'; break; case 'edit.php': $att_sql = 'SELECT * FROM ' . $db->prefix . 'attachments WHERE post_id=' . intval($id); break;}
Gemorroj » 2012.02.23 00:09

я не помню кооод!) давай ссылки на код в свн. типа http://code.google.com/p/punbb-mod/sour … ic.php#273

tipsun » 2012.02.23 00:27

А, извиняюсь.
Да я больше для себя болтаю. Сам пишу, сам читаю :D
Вот еще че, сейчас ссылки дам.
Добавлено спустя   2 минуты  51 секунду:
http://code.google.com/p/punbb-mod/sour … tch.php#37

Вот то, что я с файла-функции вытащил и в шаблон засунул
http://code.google.com/p/punbb-mod/sour … hments.php

Я бы попробовал сделать так:

Код:

1
span style="color: #0000BB"><?php$attachments[$attachment['post_id']][] = $attachment;//Ибо... сейчас напишу{if $attachments[$cur_post.id]}<div class="attach_list"> <strong>{$lang_fu.Attachments}</strong><br/> {foreach from=$attachments[$cur_post.id] item=attachment} {if $can_download} {if $basename == 'edit.php'} <input type="checkbox" name="delete_image[]" value="{$attachment.id}" /> {$lang_fu.$Mark_to_Delete} {/if} <a href="{$pun_config.o_base_url}/download.php?aid={$attachment.id}">{$attachment.filename|escape}</a> {else} <span class="red">{$attachment.filename|escape}</span> {/if} {if $attachment.size >= 1048576} {round($attachment.size / 1048576, 0)} mb {else} {round($attachment.size / 1024, 0)} kb {/if} //я позволил себе изменить: preg_match('/^image\/(.*)$/i', $attachment['mime'], $regs) {if 'image' == strTok($attachment.mime, '/')} , {strtok('/')} {$attachment.image_dim} {/if} [<strong>{$lang_fu.Downloads}: {$attachment.downloads}</strong>]<br/> {/foreach}</div>{/if}

Добавлено спустя   9 минут  59 секунд:
И у меня вроде все нормально отобразилось.

tipsun » 2012.02.23 00:54

http://code.google.com/p/punbb-mod/sour … ic.php#266

Может так или в шаблоне запускать парсер?
Ну например там может антиспам или чего еще я не прикрутил, может должен работать с исходным текстом

Код:

1
span style="color: #0000BB"><?php$posts = $pids = array();while ($cur_post = $db->fetch_assoc($result)) { $cur_post['message'] = parse_message($cur_post['message'], $cur_post['hide_smilies'], $cur_post['id']); $posts[] = $cur_post; $pids[] = $cur_post['id'];}$db->free_result($result);

Добавлено спустя   8 минут  18 секунд:
Эх, наверно зря я переносил условия полностью в шаблон.
Лучше бы оставил, чтоб потом через логику можно было сразу поменять.

Вот пример?

Код:

1
span style="color: #0000BB"><?php$is_admmod = ($pun_user['g_id'] == PUN_ADMIN || ($pun_user['g_id'] == PUN_MOD && array_key_exists($pun_user['username'], $mods_array))) ? true : false;$can_download = (!$cur_topic['file_download'] && $pun_user['g_file_download'] == 1) || $cur_topic['file_download'] == 1 || $is_admmod;$smarty->assign('is_admmod', $is_admmod);$smarty->assign('can_download', $can_download);{if $is_admmod}Ololo{/if}{if $can_download}Thx :){/if}
tipsun » 2012.02.23 01:30

Вот, если будет время + желание то:

Gemorroj » 2012.02.23 11:45

ммм, я что-то не догоняю..
что за attach?
папку themes удали, она там лишняя.

tipsun » 2012.02.23 12:18

Файл: "include/attach/fetch.php" - извлекает инфу о закрепленных файлах к посту в массив.
Файл: "include/attach/wap_view_attachments.php" - показывает инфу из нашего массива с вложениями в текущем посту.
+ Костыль
Эти файлы инклудились в "wap/viewtopic.php"

Gemorroj » 2012.02.23 13:43

аа, ясн.
еще, пользуйся Smarty комментами {* коммент *} а не html в шаблонах.

tipsun » 2012.02.23 13:55

Ok.

tipsun » 2012.02.24 13:38

Код:

1
span style="color: #0000BB"><?php//До{if ! $pun_user.is_guest}{$pun_user.username|escape}{else}Guest{/if}//После{$pun_user.username|escape|default:'Guest'}
tipsun » 2012.02.24 14:23

Может быть или не быть.

Код:

1
span style="color: #0000BB"><?php/*Можно было бы при загрузке сразу1 раз определить тип аватарки изанести в базу в таблицу с юзерамив отдельное поле, типа 'avatar_type'.В шаблоне просто потом вывести:- - - -<img src="{$smarty.const.PUN_ROOT}{$pun_config.o_avatars_dir}/{$cur_post.poster_id}.{$cur_post.avatar_type}" alt="*" />- - - -*/if ($pun_config['o_avatars'] == 1 && $cur_post['use_avatar'] == 1 && $pun_user['show_avatars']) { if ($img_size = @getimagesize('../'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.gif')) { $user_avatar = '<img src="../'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.gif" alt="*" />'; } else if ($img_size = @getimagesize('../'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.jpg')) { $user_avatar = '<img src="../'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.jpg" alt="*" />'; } else if ($img_size = @getimagesize('../'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.png')) { $user_avatar = '<img src="../'.$pun_config['o_avatars_dir'].'/'.$cur_post['poster_id'].'.png" alt="*" />'; }} else { $user_avatar = '';}
tipsun » 2012.02.24 14:36

Не хочется начинать новые файлы переводить из-за того, что потом забудешь, что тут было.
А тут еще остались моменты.
Или сделать как получится и потом переделать?
Добавлено спустя   2 минуты  59 секунд:
user_title осталось, например.
Сейчас буду его искать.
Эта переменная нагде не выводится, чудеса епт.
- - - -
Или это $signature переменная...
Ибо <div class="hr">моя подпись высветилась</div>

tipsun » 2012.02.24 15:08


» Get posts
» Do signature parsing/caching
» echo Signature

Сделал так:

/+
Наверно не зря фиксируется $signature_cache[$cur_post['poster_id']]
Видимо где-то заново фиксируется все это дело.
После цикла с постами, именно там все это происходит вроде.
А может и нет.
+/
<?php

// Get posts
$posts = $pids = array();
while ($cur_post = $db->fetch_assoc($result)) {
   
    // Do signature parsing/caching
    if ($cur_post['signature'] && $pun_user['show_sig']) {
        if (! isset($signature_cache[$cur_post['poster_id']])) {
            $signature_cache[$cur_post['poster_id']] = parse_signature($cur_post['signature']);
        }
    }
   
    $posts[] = $cur_post;
    $pids[] = $cur_post['id']; // Need to fetch attachments from db.
}
$db->free_result($result);

// Trololo :)

$smarty->assign('signature_cache', $signature_cache);

// TEMPLATE

/*
Промазал
<div class="hr">
{* Подпись пользователя *}
{if $cur_post.signature && $pun_user.show_sig}
    {$signature_cache[$cur_post.poster_id]}
{/if}
</div>
*/

{* Подпись пользователя *}
{if $cur_post.signature && $pun_user.show_sig}
<div class="hr">{$signature_cache[$cur_post.poster_id]}</div>
{/if}


Добавлено спустя   8 минут  57 секунд:

А елки, или это просто во время цикла вывода фиксируется 1 раз пользователь с подписью.
И потом если он встретиться еще раз, то не надо еще раз парсить, а просто вытащить готовое из массива, где ключ=идЗверя, значение=егоЗапарсервированная:)Подпись.
Мдэ, сразу не догадался. :(

tipsun » 2012.02.24 18:56

Код:

1
span style="color: #0000BB"><?php{* Вне цикла надо, нет? *}{assign var='signature_cache' value=''}{* или *}{assign var='signature_cache' value=array()}{if $cur_post.signature && $pun_user.show_sig} {if ! isset($signature_cache[$cur_post.poster_id])} {$signature_cache[$cur_post.poster_id] = parse_signature($cur_post.signature)} {/if}<div class="hr">{$signature_cache[$cur_post.poster_id]}</div>{/if}
tipsun » 2012.02.24 21:15

Не могу найти где это выводится.
Вроде больше интимных мест не осталось.
wap/viewtopic.php#137
wap/viewtopic.php#187
wap/viewtopic.php#311
wap/viewtopic.php#339
wap/viewtopic.php#344

Gemorroj » 2012.02.24 23:43

а кстати, вполне возможно что в вап версии некоторые переменные и не используются.

tipsun » 2012.02.24 23:46

Ну наверно. Я ни в header.php, ни в footer.php не нашел таких переменных.
Я сейчас их буду подробней рассматривать. Наброски то уже есть.

tipsun » 2012.02.25 14:38

wap/footer.php#9 :: include/functions.php#289

Еще другой в другой функции есть кусок этот.

Код:

1
span style="color: #0000BB"><?php// Are there any additional navlinks we should insert into the array before imploding it?if ($pun_config['o_additional_navlinks']) { if (preg_match_all('#([0-9]+)\s*=\s*(.*?)\n#s', $pun_config['o_additional_navlinks'], $extra_links)) { // Insert any additional links into the $links array (at the correct index) for ($i = 0, $all = sizeof($extra_links[1]); $i < $all; ++$i) { if (preg_match('!<a[^>]+href="?\'?([^ "\'>]+)"?\'?[^>]*>([^<>]*?)</a>!is', $extra_links[2][$i], $row)) { array_splice($out, $extra_links[1][$i], 0, array('<option value="' . $row[1] . '">' . $row[2] . '</option>')); } } }}
tipsun » 2012.02.25 20:28

Интимные места, как всегда.
- Выкинул запрос в базу.
* Проигнорировал инклуд.
- Не обратил внимание на развилку wap_main и help.

Код:

1
span style="color: #0000BB"><?php{assign var='Not_logged_in' value='Not logged in'}{assign var='New_reports' value='New reports'}{assign var='Full_inbox' value='Full inbox'}{assign var='New_messages' value='Почта'}{* assign var='New_messages' value='New messages' *}<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru"> <head> <meta http-equiv="Expires" content="Thu, 21 Jul 1977 07:30:00 GMT" /> <meta http-equiv="Last-Modified" content="{$smarty.now|date_format:'r'} GMT" /> <meta http-equiv="Cache-Control" content="post-check=0, pre-check=0" /> <meta http-equiv="Pragma" content="no-cache" /> {* <pun_char_encoding> *} <meta http-equiv="Content-Type" content="text/html; charset={$lang_common.lang_encoding}" /> {*+ <pun_head> *} <title>{$page_title|escape}</title> <link rel="stylesheet" type="text/css" href="{$smarty.const.THEME_DIR}style.css" /> {*- <pun_head> *} {* <pun_rssname> *} {* <pun_rss> *} <link rel="alternate" type="application/rss+xml" title="{$pun_config.o_board_title}" href="{$smarty.const.PUN_ROOT}rss.xml" /> </head> <body> {if $basename == 'index.php'} {* <pun_hd> *} <div class="hd"> <img src="{$smarty.const.THEME_DIR}imgs/logo.gif" title="{$lang_common.Forum} {$smarty.server.HTTP_HOST}" alt="{$lang_common.Forum} {$smarty.server.HTTP_HOST}" /> </div> {if $pun_config.o_board_desc} {* <pun_desc> *} <div class="hd_bott"> {$pun_config.o_board_desc} </div> {/if} {*+ <pun_status> *} {if $pun_user.is_guest} <div class="con"> {$lang_common.$Not_logged_in} </div> {/if} {if $pun_user.g_id < $smarty.const.PUN_GUEST} {if $result_header} {* Query to db *} <div class="con"> <a href="{$smarty.const.PUN_ROOT}admin_reports.php">{$lang_admin.$New_reports}</a> </div> {/if} {if $pun_config.o_maintenance == 1} <div class="con"> <a href="{$smarty.const.PUN_ROOT}admin_options.php#maintenance">{$lang_admin.maintenance}</a> </div> {/if} {/if} {* require PUN_ROOT . 'include/pms/wap_header_new_messages.php'; *} {* ЛС *} {if $isset_new_message} <div class="info"> <a href="message_list.php"> {$New_messages} {* $lang_pms.$New_messages *} </a> </div> {if $count[0] >= $pun_user.g_pm_limit} <div class="red"> <a href="message_list.php">{$lang_pms.$Full_inbox}</a> </div> {/if} {/if} {*- <pun_status> *} {/if} <div class="in"> <div> <a href="{$smarty.const.PUN_ROOT}rss.xml">RSS</a> </div> </div> {if $basename == 'index.php' && $pun_config.o_announcement == 1} {* <pun_announcement> *} <div class="incqbox"> {$lang_common.Announcement} </div> <div class="msg"> {$pun_config.o_announcement_message} </div> {/if} {if $basename == 'profile.php' || $basename == 'search.php' || $basename == 'userlist.php' || $basename == 'message_list.php' || $basename == 'message_send.php' || $basename == 'message_delete.php' || $basename == 'misc.php' || $basename == 'filemap.php' || $basename == 'karma.php'} <div class="inbox"> <a href="index.php">{$lang_common.Index}</a> </div> {/if}
tipsun » 2012.02.25 20:56

По-моему все эти условия тоже не стоит переносить в шаблон.
Только самое нужное.
Все условия скорее всего надо держать в логике, потом только передать типа:

В шаблоне уже элементарные условия, определяющие показать или нет.

Код:

1
span style="color: #0000BB"><?phpif (/* условия */) {$smarty->assign('isset_new_message', true);}{if $isset_new_message}<div class="mail">{$check_mail_box}</div>{/if}
tipsun » 2012.02.28 22:59

» include/pms/wap_header_new_messages.php используется в wap/header.php

Код:

1
span style="color: #0000BB"><?phpif (! $pun_user['is_guest'] && $pun_user['g_pm'] == 1 && $pun_config['o_pms_enabled'] && $pun_user['messages_enable'] == 1) { // Check for new messages $result_messages = $db->query('SELECT COUNT(1) FROM '.$db->prefix.'messages WHERE showed=0 AND owner='.$pun_user['id']) or error('Unable to check for new messages', __FILE__, __LINE__, $db->error()); $new_msg = $db->fetch_row($result_messages); if ($new_msg[0] > 0) { $condition['count_new_msgs'] = $new_msg[0]; } // Check if the inbox is full $result = $db->query('SELECT COUNT(1) FROM '.$db->prefix.'messages WHERE owner='.$pun_user['id']) or error('Unable to test if the message-box is full', __FILE__, __LINE__, $db->error()); $count = $db->fetch_row($result); if ($count[0] >= $pun_user['g_pm_limit']) { $condition['full_inbox'] = true; }}
tipsun » 2012.02.28 23:28

Может что-то типа такого, или лучше можно сделать.
Или, как в мануале, сделать класс загрузки Smarty
» wap/header.php

Код:

1
span style="color: #0000BB"><?phpif (! defined('PUN') or ! defined('PUN_ROOT')) exit(); define('PUN_HEADER', 1);if (defined('SMARTY')) { define('SMARTY_DIR', PUN_ROOT . 'include/Smarty/'); require_once SMARTY_DIR . 'Smarty.class.php'; $smarty = new Smarty(); define('THEME_DIR', PUN_ROOT . 'include/template/wap/' . $pun_user['style_wap'] . '/'); $smarty->template_dir = THEME_DIR . 'tpls/'; $smarty->compile_dir = THEME_DIR . 'compiled/'; $smarty->config_dir = THEME_DIR . 'configs/'; $smarty->cache_dir = THEME_DIR . 'cache/';}if ($pun_user['g_id'] < PUN_GUEST) { $result_header = $db->query('SELECT COUNT(1) FROM `' . $db->prefix . 'reports` WHERE `zapped` IS NULL') or error('Unable to fetch reports info', __FILE__, __LINE__, $db->error()); if ($db->result($result_header)) { $condition['reports'] = true; }}require PUN_ROOT . 'include/pms/wap_header_new_messages.php';//Уже в конце://$smarty->assign('conditions', $conditions);$smarty->assign('condition', $condition);$smarty->display('some.tpl');
Gemorroj » 2012.02.29 00:58

а как в мануале? я давненько со смарти не работал. вообще по логике да, нужно делать класс обертку.
типа PunTemplate extends Smarty {}

tipsun » 2012.02.29 10:10

v2 http://smarty.net/docsv2/ru/installing. … tended.tpl
v3 http://smarty.net/docs/en/installing.sm … tended.tpl

Gemorroj » 2012.02.29 12:36

ну так да, об этом и речь)

tipsun » 2012.02.29 16:13

Хотя в принципе так тоже удобно запускать Smarty, не?

Код:

1
span style="color: #0000BB"><?php//define('SMARTY', 1);define('PUN_TEMPLATE', 1);require_once PUN_ROOT . 'wap/header.php';

. . . .

Есть такое в footer.php
Как с этим быть я не знаю.
Генерирует файл, который потом инклудится в footer.php.

Код:

1
span style="color: #0000BB"><?php//// Generate WAP quickjump cache PHP scripts//function generate_wap_quickjump_cache($group_id = false){ global $db, $lang_common, $pun_config; // If a group_id was supplied, we generate the quickjump cache for that group only if ($group_id !== false) { $groups[0] = $group_id; } else { // A group_id was now supplied, so we generate the quickjump cache for all groups $result = $db->query('SELECT g_id FROM ' . $db->prefix . 'groups') or error('Unable to fetch user group list', __FILE__, __LINE__, $db->error()); $num_groups = $db->num_rows($result); for ($i = 0; $i < $num_groups; ++$i) { $groups[] = $db->result($result, $i); } } // Loop through the groups in $groups and output the cache for each of them while (list(, $group_id) = @each($groups)) { // Output wap quickjump as PHP code $fh = @fopen(PUN_ROOT . 'cache/cache_wap_quickjump_' . $group_id . '.php', 'wb'); if (!$fh) { error('Unable to write quickjump cache file to cache directory. Please make sure PHP has write access to the directory "cache"', __FILE__, __LINE__); } $output = '<?php if (! defined(\'PUN\')) exit(); define(\'PUN_QJ_LOADED\', 1); ?>' . '<form id="qjump" method="get" action="viewforum.php">' . '<div class="inbox">' . '<label>' . $lang_common['Jump to'] . '<br />' . '<select name="id" onchange="window.location.href=\\\'' . $pun_config['o_base_url'] . '/wap/viewforum.php?id=\\\'+this.options[this.selectedIndex].value;">'; $result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.redirect_url FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$group_id.') WHERE fp.read_forum IS NULL OR fp.read_forum=1 ORDER BY c.disp_position, c.id, f.disp_position', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error()); $cur_category = 0; while ($cur_forum = $db->fetch_assoc($result)) { // A new category since last iteration? if ($cur_forum['cid'] != $cur_category) { if ($cur_category) { $output .= '</optgroup>'; } $output .= '<optgroup label="' . pun_htmlspecialchars($cur_forum['cat_name']) . '">'; $cur_category = $cur_forum['cid']; } $redirect_tag = ($cur_forum['redirect_url']) ? ' &gt;&gt;&gt;' : ''; $output .= '<option value="' . $cur_forum['fid'] . '"'; if ($group_id == $cur_forum['fid']) { $output .= ' selected="selected"'; } $output .= '>' . pun_htmlspecialchars($cur_forum['forum_name']) . $redirect_tag . '</option>'; } $output .= '</optgroup>' . '</select>' . '<input type="submit" value="' . $lang_common['Go'] . '" accesskey="g" />' . '</label>' . '</div>' . '</form>'; fputs($fh, $output); fclose($fh); }}
Gemorroj » 2012.02.29 17:54

tipsun написал:

Хотя в принципе так тоже удобно запускать Smarty, не?

как так? я не понял.
насчет статичного файла - наверное, просто {include file='cache/cache_wap_quickjump_' . $group_id . '.php'} пока делай. $group_id должна быть в шаблоне

tipsun » 2012.02.29 19:38

Сначала #83 в шапке или где удобно, что обычно в любом случае инклудится, расположить.
Потом вызывать так типа:

Код:

1
span style="color: #0000BB"><?php define('SMARTY', 1);require_once PUN_ROOT . 'wap/header.php';

Короче. Дальше потихоньку пойду.

Gemorroj » 2012.02.29 20:46

не-не-не, класс прослойка над Smarty должен быть обязательно.

tipsun » 2012.02.29 21:34

А, ок. Сделаю.

tipsun » 2012.03.01 00:19

Да что такое, только вроде начал запускаться Smarty, теперь шаблоны не выводятся.
Хотя в них нет ошибок. Без скорлупы или как там, работало. :(
Добавлено спустя   7 минут  42 секунды:

wap/viewtopic.php

Код:

1
span style="color: #0000BB"><?php define('PUN_ROOT', '../');require_once(PUN_ROOT . 'include/common.php');require_once(PUN_ROOT . 'include/file_upload.php');require_once(PUN_ROOT . 'lang/' . $pun_user['language'] . '/post.php');//require_once(PUN_ROOT . 'wap/header.php');//require_once('header.php');require_once(PUN_ROOT . 'include/Smarty/Smarty.class.php');$smarty = new Smarty();$dir = PUN_ROOT . 'include/template/wap/' . $pun_user['style_wap'] . '/';$smarty->template_dir = $dir . 'tpls/';$smarty->compile_dir = $dir . 'compiled/';$smarty->config_dir = $dir . 'configs/';$smarty->cache_dir = $dir . 'cache/';//$this->caching = true;$smarty->assign('punDesignDir', $dir);

wap/header.php

Код:

1
span style="color: #0000BB"><?php if (! defined('PUN') or ! defined('PUN_ROOT')) exit(); define('PUN_HEADER', 1);require_once(PUN_ROOT . 'include/template.php');$smarty = new Pun_Template(PUN_ROOT . 'include/template/wap/' . $pun_user['style_wap'] . '/');if ($pun_user['g_id'] < PUN_GUEST) { $result_header = $db->query('SELECT COUNT(1) FROM `' . $db->prefix . 'reports` WHERE `zapped` IS NULL') or error('Unable to fetch reports info', __FILE__, __LINE__, $db->error()); if ($db->result($result_header)) { $conditions['reports'] = true; }}require PUN_ROOT . 'include/pms/wap_header_new_messages.php';

include/template.php

Код:

1
span style="color: #0000BB"><?php if (! defined('PUN')) exit(); define('PUN_TEMPLATE', 1);require_once('Smarty/Smarty.class.php');class Pun_Template extends Smarty{ public function __construct($dir) { $this->template_dir = $dir . 'tpls/'; $this->compile_dir = $dir . 'compiled/'; $this->config_dir = $dir . 'configs/'; $this->cache_dir = $dir . 'cache/'; //$this->caching = true; $this->assign('punDesignDir', $dir); }}
tipsun » 2012.03.01 00:33

Без прослойки работает, проверил. Ну шаблон собранный показывает.
Добавлено спустя   1 минуту  27 секунд:
Где-то я туплю, видимо.
Добавлено спустя   6 минут  48 секунд:
Пойду спать.

tipsun » 2012.03.02 14:25

Итак...
С прослойкой так и не разобрался.

Показать/Скрыть
Fatal error: Call to a member function createTemplate() on a non-object in L:\home\punbb.mod\www\include\Smarty\sysplugins\smarty_internal_templatebase.php on line 47

Gemorroj » 2012.03.02 14:57

Pun_Template - так не называй. такое название говорит о том, что этот класс должен быть в папке Pun и файл называться Template.php
какой код вызывается когда ты получаешь эту ошибку?

tipsun » 2012.03.02 15:22

» #92 - вот там я все показал.
Без прослойки работает.
Хорошо, как назвать тогда? "include_template" = include/template.php

Gemorroj » 2012.03.02 17:50

класс PunTemplate назови.
файл include/PunTemplate.php

tipsun » 2012.03.02 21:40

Ой бле! Вот я тормоз.
Метод надо так же как класс назвать, видимо. Сейчас попробую.

Код:

1
span style="color: #0000BB"><?phpclass Smarty_GuestBook extends Smarty { function Smarty_GuestBook() { // Конструктор класса. // Он автоматически вызывается при создании нового экземпляра. $this->Smarty(); $this->template_dir = '/web/www.example.com/guestbook/templates/'; $this->compile_dir = '/web/www.example.com/guestbook/templates_c/'; $this->config_dir = '/web/www.example.com/guestbook/configs/'; $this->cache_dir = '/web/www.example.com/guestbook/cache/'; $this->caching = true; $this->assign('app_name', 'Guest Book'); }}$smarty = new Smarty_GuestBook();
Gemorroj » 2012.03.02 21:46

нее, это из времен php4. в php5 кошерно коструктор называть __construct

tipsun » 2012.03.02 21:46

Нет. Вот так получилось норм.

Код:

1
span style="color: #0000BB"><?php// include/template.phpif (! defined('PUN')) exit(); define('PUN_TEMPLATE', 1);require_once('Smarty/Smarty.class.php');class PunTemplate extends Smarty{ function PunTemplate($dir) { $this->__construct(); $this->template_dir = $dir . 'tpls/'; $this->compile_dir = $dir . 'compiled/'; $this->config_dir = $dir . 'configs/'; $this->cache_dir = $dir . 'cache/'; $this->assign('punDesignDir', $dir); }}// wap/header.phprequire_once(PUN_ROOT . 'include/template.php');$smarty = new PunTemplate(PUN_ROOT . 'include/template/wap/' . $pun_user['style_wap'] . '/');// wap/viewtopic.phprequire_once(PUN_ROOT . 'wap/header.php');

Добавлено спустя   3 минуты :

Gemorroj написал:

нее, это из времен php4. в php5 кошерно коструктор называть __construct

Да. :)
Нет - я говорил сам себе :)
Добавлено спустя   5 минут  35 секунд:
Ладно. Сейчас чуть по коду погуляю. Может че получится.

Gemorroj » 2012.03.02 21:59

файл назови не template.php, а PunTemplate.php т.е. так же как и класс называется

tipsun » 2012.03.02 22:00

Хорошо.

Gemorroj » 2012.03.02 22:00

и в конструктор передавай только название темы, класс прослойка должен сам понимать какие пути нужно установить основываясь только на названии темы.
Добавлено спустя    30 секунд:
ну и блин конструктор все-таки __construct назови

tipsun » 2012.03.02 22:10

Если метод PunTemplate переименовать в "__construct", то перестает работать.
Добавлено спустя   3 минуты  3 секунды:
Про пути, сейчас попробую.

Gemorroj » 2012.03.02 22:33

tipsun, ты на php4 чтоли сидишь?)

tipsun » 2012.03.02 22:41

Нет вроде. Денвер же содержит PHP v5.2

Gemorroj » 2012.03.02 22:42

у денвера есть разные версии

tipsun » 2012.03.02 23:12

phpVersion() = 5.2.12

Gemorroj » 2012.03.02 23:26

ну проблема в любом случае не в названии конструктора.

tipsun » 2012.03.03 11:41

Вроде так должно сработать.
Просто сегодня баловался со своим говноКодом и случайно получилось.

Код:

1
span style="color: #0000BB"><?phpclass PunTemplate extends Smarty{ function __construct($dir) { parent::__construct(); //etс. }}

.
.
Добавлено спустя   4 минуты  24 секунды:
Да, вроде как работает.
А вот с путями чет не разобрался.
.
.

Gemorroj » 2012.03.03 11:48

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

tipsun » 2012.03.03 11:51

Я сам не знаю, чего я пытался, но работает :D
Добавлено спустя   9 минут  14 секунд:
Вообщем с путями:
1) Надо чтоб смарти шаблоны увидел.
2) Надо чтоб в шаблоне при указании положения CSS, тоже было все норм. Ну если форум не в корне сайта.

Код:

1
span style="color: #0000BB"><?phpclass PunTemplate extends Smarty{ function __construct($punDesignName) { parent::__construct(); //$root = str_replace($_SERVER['DOCUMENT_ROOT'], null, str_replace('\\', '/', dirName(__FILE__))) . '/template/wap/' . $punDesignName . '/'; $punDesignDir = dirName(__FILE__) . '/template/wap/' . $punDesignName; $this->template_dir = $punDesignDir . '/tpls/'; $this->compile_dir = $punDesignDir . '/compiled/'; $this->config_dir = $punDesignDir . '/configs/'; $this->cache_dir = $punDesignDir . '/cache/'; //$this->assign('punDesignDir', $root); }}
tipsun » 2012.03.03 12:05

Можно в самом шаблоне header.tpl указывать: {$smarty.const.PUN_ROOT}{$cssDir}style.css
- где PUN_ROOT задается изначально, в логике.

Gemorroj » 2012.03.03 12:24

не надо. это работа прослойки.

tipsun » 2012.03.03 12:26

#112. закомментированное работает, в принципе.
Но у форума есть web и wap версии.

tipsun » 2012.03.04 00:07

Сейчас вот подумал, что условия логики в переменную наверно лучше загонять и только те условия, которые контролируют вывод в шаблоне никуда не денутся.
Начал с header.tpl (еще есть footer.tpl и viewtopic.tpl)
Добавлено спустя   3 минуты  22 секунды:
Вот пример:
Загнал сразу в smarty, т.к. скорее всего больше нигде не используется результат выполнения.

Код:

1
span style="color: #0000BB"><?php// include/pms/wap_header_new_messages.phpif (! $pun_user['is_guest'] && $pun_user['g_pm'] == 1 && $pun_config['o_pms_enabled'] && $pun_user['messages_enable'] == 1) { require_once PUN_ROOT . 'lang/' . $pun_user['language'] . '/pms.php'; // Check for new messages $result_messages = $db->query('SELECT COUNT(1) FROM '.$db->prefix.'messages WHERE showed=0 AND owner='.$pun_user['id']) or error('Unable to check for new messages', __FILE__, __LINE__, $db->error()); $new_msg = $db->fetch_row($result_messages); if ($new_msg[0] > 0) { $smarty->append('conditions', array('count_new_msgs' => $new_msg[0])); } // Check if the inbox is full $result = $db->query('SELECT COUNT(1) FROM '.$db->prefix.'messages WHERE owner='.$pun_user['id']) or error('Unable to test if the message-box is full', __FILE__, __LINE__, $db->error()); $count = $db->fetch_row($result); if ($count[0] >= $pun_user['g_pm_limit']) { $smarty->append('conditions', array('full_inbox' => true)); }}// tpl {if $conditions.count_new_msgs} <div class="info"> <a href="message_list.php"> {$lang_pms.$New_messages} ({$conditions.count_new_msgs}) </a> </div> {/if}
Gemorroj » 2012.03.04 00:36

ну, тут логика отображения идет, а она должна быть в шаблоне. хотя, тут не принципиально. как проще, так и лучше.

tipsun » 2012.03.04 01:16

Не могу справиться.

Код:

1
span style="color: #0000BB"><?php // Display the "Jump to" drop list if ($pun_config['o_quickjump'] == 1) { // Load cached quickjump // included quickjump @include PUN_ROOT . 'cache/cache_wap_quickjump_' . $forum_id . '.php'; if (!defined('PUN_QJ_LOADED')) { include PUN_ROOT . 'include/cache.php'; generate_wap_quickjump_cache($forum_id); include PUN_ROOT.'cache/cache_wap_quickjump_' . $forum_id . '.php'; } }

.
.
Добавлено спустя   4 минуты  20 секунд:
Быстрый переход по форумам.

tipsun » 2012.03.04 01:29

Оказывается $forum_id это в файле viewtopic.php есть $id
Добавлено спустя   5 минут  45 секунд:
.
.
Короче. Чет не получается аккуратно в шаблоне разместить. Вот логический костыль :)
wap/footer.php

Код:

1
span style="color: #0000BB"><?php if (! defined('PUN') or ! defined('PUN_ROOT')) exit();if ($pun_config['o_quickjump'] == 1) { // Load cached quickjump // included quickjump ob_start(); @include PUN_ROOT . 'cache/cache_wap_quickjump_' . $id . '.php'; ob_end_clean(); if (! defined('PUN_QJ_LOADED')) { include PUN_ROOT . 'include/cache.php'; generate_wap_quickjump_cache($id); //include PUN_ROOT.'cache/cache_wap_quickjump_' . $forum_id . '.php'; }}

.
.
footer.tpl

Код:

1
span style="color: #0000BB"><?php{if $pun_config.o_quickjump == 1 and $basename == 'viewforum.php' || $basename == 'viewtopic.php'} {fetch file="{$smarty.const.PUN_ROOT}cache/cache_wap_quickjump_{$forum_id}.php"}{/if}
tipsun » 2012.03.04 01:52

Код:

1
span style="color: #0000BB"><?php {* Дополнительные ссылки // Are there any additional navlinks we should insert into the array before imploding it? if ($pun_config['o_additional_navlinks']) { if (preg_match_all('#([0-9]+)\s*=\s*(.*?)\n#s', $pun_config['o_additional_navlinks'], $extra_links)) { // Insert any additional links into the $links array (at the correct index) for ($i = 0, $all = sizeof($extra_links[1]); $i < $all; ++$i) { if (preg_match('!<a[^>]+href="?\'?([^ "\'>]+)"?\'?[^>]*>([^<>]*?)</a>!is', $extra_links[2][$i], $row)) { array_splice($out, $extra_links[1][$i], 0, array('<option value="' . $row[1] . '">' . $row[2] . '</option>')); } } } } *}
Gemorroj » 2012.03.04 12:41

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

tipsun » 2012.03.04 13:09

Сейчас viewforum.tpl буду собирать.
Добавлено спустя   1 минуту  7 секунд:
Вроде интимных мест нет, но заросли еще те.

tipsun » 2012.03.04 16:20

Мозайка, епт! :(

Код:

1
span style="color: #0000BB"><?php{include file='header.tpl'}{* Навигация: Главная / Форум / Тема *}<div class="inbox"> <a href="index.php">{$lang_common.Index}</a> » {$cur_forum.forum_name|escape}</div>{assign var='date_format' value='%d/%m/%y %H:%I:%S'}{assign var='Post_topic' value='Post topic'}{assign var='Empty_forum' value='Empty forum'}{assign var='Closed_icon_m' value='Closed icon_m'}{assign var='j' value='false'}{foreach from=$topics item=cur_topic}<div class="{if ($j = ! $j)}msg{else}msg2{/if}">{* +SUBJECT *}<strong>{if $cur_topic.moved_to} {$lang_forum.Moved_m}{elseif $cur_topic.closed} {$lang_common.$Closed_icon_m}{/if} {if $pun_config.poll_enabled == 1 && $cur_topic.has_poll} {$lang_forum.poll_m}{/if}{if $cur_topic.sticky == 1} {$lang_forum.Sticky_m}{/if}</strong><a href="viewtopic.php?id={$cur_topic.moved_to|default:$cur_topic.id}">{$cur_topic.subject|escape}</a> {$lang_common.by} {$cur_topic.poster|escape}{* -SUBJECT *}{if ! $cur_topic.moved_to} ({$cur_topic.num_replies}/{$cur_topic.num_views}){$icon_new_text}<br/><span class="sub">» <a href="viewtopic.php?pid={$cur_topic.last_post_id}#p{$cur_topic.last_post_id}">{$cur_topic.last_post|date_format:$date_format}</a> {$lang_common.by} {$cur_topic.last_poster|escape};</span>{/if}</div>{foreachelse}<div class="in">{$lang_forum.$Empty_forum}</div>{/foreach}<div class="con">{$paging_links}</div>{if (! $cur_forum.post_topics && $pun_user.g_post_topics == 1) || $cur_forum.post_topics == 1 || $is_admmod}<div class="go_to"> <a class="but" href="post.php?fid={$id}">{$lang_forum.$Post_topic}</a></div>{/if}{include file='footer.tpl'}
Gemorroj » 2012.03.04 16:34

норм)

tipsun » 2012.03.04 16:41

Это не все, прилично еще осталось.

tipsun » 2012.03.06 17:08

Вроде тоже все.
Ну на 100% не уверен, может чего пропустил.
Вроде как с иконками лишнее там.

Код:

1
span style="color: #0000BB"><?php $icon_text = $lang_common['Normal icon']; // используется $item_status = ''; // нет $icon_type = 'icon'; // нет{include file='header.tpl'}{* Навигация: Главная / Форум *}<div class="inbox"> <a href="index.php">{$lang_common.Index}</a> » {$cur_forum.forum_name|escape}</div>{assign var='date_format' value='%d/%m/%y %H:%I:%S'}{assign var='Post_topic' value='Post topic'}{assign var='Empty_forum' value='Empty forum'}{assign var='Closed_icon_m' value='Closed icon_m'}{assign var='New_icon_m' value='New icon_m'}{assign var='Normal_icon' value='Normal icon'}{assign var='j' value='false'}{foreach from=$topics item=cur_topic}<div class="{if ($j = ! $j)}msg{else}msg2{/if}">{* +SUBJECT *}<strong>{if $cur_topic.moved_to} {$lang_forum.Moved_m}{elseif $cur_topic.closed} {$lang_common.$Closed_icon_m}{else} {$lang_common.$Normal_icon}{/if} {if $pun_config.poll_enabled == 1 && $cur_topic.has_poll} {$lang_forum.poll_m}{/if}{if $cur_topic.sticky == 1} {$lang_forum.Sticky_m}{/if}</strong>{* // Should we display the dot or not? :) *}{if ! $pun_user.is_guest && $pun_config.o_show_dot == 1 and $cur_topic.has_posted == $pun_user.id}<strong>·</strong>{/if}<a href="viewtopic.php?id={$cur_topic.moved_to|default:$cur_topic.id}">{if $pun_config.o_censoring == 1} {censor_words($cur_topic.subject)|escape}{else} {$cur_topic.subject|escape}{/if}</a>{* assign var='num_pages_topic' value=ceil(($cur_topic.num_replies + 1) / $pun_user.disp_posts) *}{*/*// If there are topics in this forum.if ($db->num_rows($result)) { while ($cur_topic = $db->fetch_assoc($result)) { $cur_topic['num_pages_topic'] = ceil(($cur_topic['num_replies'] + 1) / $pun_user['disp_posts']); $topics[] = $cur_topic; }}*/*}{if $cur_topic.num_pages_topic > 1}[{paginate($cur_topic.num_pages_topic, -1, "viewtopic.php?id={$cur_topic.id}")}]{/if} {$lang_common.by} {$cur_topic.poster|escape}{* -SUBJECT *}{if ! $cur_topic.moved_to} ({$cur_topic.num_replies}/{$cur_topic.num_views}){* ! $cur_topic.moved_to &&*}{if ! $pun_user.is_guest && $cur_topic.last_poster != $pun_user.username && ! is_reading($cur_topic.log_time, $cur_topic.last_post) && $cur_topic.last_post > $cur_topic.mark_read && ($cur_topic.last_post > $pun_user.last_visit || ($smarty.server.REQUEST_TIME - $cur_topic.last_post < $pun_user.mark_after) )} <span class="red">{$lang_common.$New_icon_m}</span>{/if}<br/><span class="sub">» <a href="viewtopic.php?pid={$cur_topic.last_post_id}#p{$cur_topic.last_post_id}">{$cur_topic.last_post|date_format:$date_format}</a> {$lang_common.by} {$cur_topic.last_poster|escape};</span>{/if}</div>{foreachelse}<div class="in">{$lang_forum.$Empty_forum}</div>{/foreach}<div class="con">{$paging_links}</div>{if (! $cur_forum.post_topics && $pun_user.g_post_topics == 1) || $cur_forum.post_topics == 1 || $is_admmod}<div class="go_to"> <a class="but" href="post.php?fid={$id}">{$lang_forum.$Post_topic}</a></div>{/if}{include file='footer.tpl'}
tipsun » 2012.03.08 01:09

wap/userlist.php - пока не работает!

Код:

1
span style="color: #0000BB"><?php{assign var='User_search' value='User search'}{assign var='User_find_legend' value='User find legend'}{assign var='User_group' value='User group'}{assign var='All_users' value='All users'}{assign var='Sort_by' value='Sort by'}{assign var='No_of_posts' value='No of posts'}{assign var='Sort_order' value='Sort order'}{assign var='User_search_info' value='User search info'}{assign var='User_list' value='User list'}{assign var='No_hits' value='No hits'}{* Образец показа даты/времени *}{assign var='date_format' value='%d/%m/%y %H:%I:%S'}<div class="con"> <strong>{$lang_search.$User_search}</strong></div><form method="get" action="userlist.php?"><div class="input"><strong>{$lang_ul.$User_find_legend}</strong><br/>{if $pun_user['g_search_users'] == 1} {$lang_common.Username}<br/> <input type="text" name="username" value="{$username|escape}" maxlength="25" /><br/>{/if}{$lang_ul.$User_group}<br/><select name="show_group"><option value="-1"{if $show_group == -1} selected="selected"{/if}>{$lang_ul.$All_users}</option>{foreach from=$groups item=cur_group} <option value="{$cur_group.g_id}"{if $cur_group.g_id == $show_group} selected="selected"{/if}>{$cur_group.g_title|escape}</option>{/if}</select><br/>{$lang_search.$Sort_by}<br/><select name="sort_by"><option value="username"{if $sort_by == 'username'} selected="selected"{/if}>{$lang_common.Username}</option><option value="registered"{if $sort_by == 'registered'} selected="selected"{/if}>{$lang_common.Registered}</option>{if $show_post_count}<option value="num_posts"{if $sort_by == 'num_posts'} selected="selected"{/if}>{$lang_ul$No_of_posts}</option>{/if}</select><br/>{$lang_search.$Sort_order}<br/><select name="sort_dir"><option value="ASC"{if $sort_dir == 'ASC'} selected="selected"{/if}>{$lang_search.Ascending}</option><option value="DESC"{if $sort_dir == 'DESC'} selected="selected"{/if}>{$lang_search.Descending}</option></select></div><div class="input2">{$lang_ul.$User_search_info}</div><div class="go_to"> <input type="submit" name="search" value="{$lang_common.Submit}" accesskey="s" /></div></form><div class="con"><strong>{$lang_common.$User_list}</strong></div><div class="navlinks">{$lang_common.Username}{if $show_post_count} | {$lang_common.Posts}{/if} | {$lang_common.Title} | {$lang_common.Registered}</div>{foreach from=$users item=user_data}<div class="{if $j = ! $j}in{else}in2{/if}"><strong><a href="profile.php?id={$user_data.id}">{$user_data.username|escape}</a></strong> {if $show_post_count}[{$user_data.num_posts}]{/if}{$user_title_field} ({$user_data.registered|date_format:$date_format})</div>{foreachelse}<div class="msg">{$lang_search.$No_hits}</div>{/foreach}<div class="con">{$paging_links}</div>
tipsun » 2012.03.08 01:31

Line 198: include/cache.php
Получается ноги из wap/footer.php - который я сам делал :D
Добавлено спустя   3 минуты  55 секунд:

Код:

1
span style="color: #0000BB"><?php if (! defined('PUN') or ! defined('PUN_ROOT')) exit();//if ($pun_config['o_quickjump'] == 1) {//if ('viewtopic.php' == $basename and $pun_config['o_quickjump'] == 1) {if ($pun_config['o_quickjump'] == 1 and ('viewtopic.php' == $basename or 'viewforum.php' == $basename)) { // Load cached quickjump // included quickjump ob_start(); @include PUN_ROOT . 'cache/cache_wap_quickjump_' . $id . '.php'; ob_end_clean(); if (! defined('PUN_QJ_LOADED')) { include PUN_ROOT . 'include/cache.php'; generate_wap_quickjump_cache($id); //include PUN_ROOT.'cache/cache_wap_quickjump_' . $forum_id . '.php'; }}
tipsun » 2012.03.08 10:55

Из-за одной точки не работал шаблон. :(
Сейчас вроде в шаблоне нет ошибок.
А вот смарти чет при assign не отображает шаблон.

tipsun » 2012.03.08 12:22

Исправил.
Наконец работает.
Сейчас занесу необходимые переменные в $smarty.

tipsun » 2012.03.08 12:34

Получите и распишитесь :)

Код:

1
span style="color: #0000BB"><?php{include file='header.tpl'}{* Образец показа даты/времени *}{assign var='date_format' value='%d/%m/%y %H:%I:%S'}{assign var='User_search' value='User search'}{assign var='User_find_legend' value='User find legend'}{assign var='User_group' value='User group'}{assign var='All_users' value='All users'}{assign var='Sort_by' value='Sort by'}{assign var='No_of_posts' value='No of posts'}{assign var='Sort_order' value='Sort order'}{assign var='User_search_info' value='User search info'}{assign var='User_list' value='User list'}{assign var='No_hits' value='No hits'}<div class="con"> <strong>{$lang_search.$User_search}</strong></div><form method="get" action="userlist.php?"><div class="input"><strong>{$lang_ul.$User_find_legend}</strong><br/>{if $pun_user.g_search_users == 1} {$lang_common.Username}<br/> <input type="text" name="username" value="{$username|escape}" maxlength="25" /><br/>{/if}{$lang_ul.$User_group}<br/><select name="show_group"><option value="-1"{if $show_group == -1} selected="selected"{/if}>{$lang_ul.$All_users}</option>{foreach from=$groups item=cur_group} <option value="{$cur_group.g_id}"{if $cur_group.g_id == $show_group} selected="selected"{/if}>{$cur_group.g_title|escape}</option>{/foreach}</select><br/>{$lang_search.$Sort_by}<br/><select name="sort_by"><option value="username"{if $sort_by == 'username'} selected="selected"{/if}>{$lang_common.Username}</option><option value="registered"{if $sort_by == 'registered'} selected="selected"{/if}>{$lang_common.Registered}</option>{if $show_post_count}<option value="num_posts"{if $sort_by == 'num_posts'} selected="selected"{/if}>{$lang_ul.$No_of_posts}</option>{/if}</select><br/>{$lang_search.$Sort_order}<br/><select name="sort_dir"><option value="ASC"{if $sort_dir == 'ASC'} selected="selected"{/if}>{$lang_search.Ascending}</option><option value="DESC"{if $sort_dir == 'DESC'} selected="selected"{/if}>{$lang_search.Descending}</option></select></div><div class="input2">{$lang_ul.$User_search_info}</div><div class="go_to"> <input type="submit" name="search" value="{$lang_common.Submit}" accesskey="s" /></div></form><div class="con"><strong>{$lang_common.$User_list}</strong></div><div class="navlinks">{$lang_common.Username}{if $show_post_count} | {$lang_common.Posts}{/if} | {$lang_common.Title} | {$lang_common.Registered}</div>{foreach from=$users item=user_data}<div class="{if $j = ! $j}in{else}in2{/if}"><strong><a href="profile.php?id={$user_data.id}">{$user_data.username|escape}</a></strong> {if $show_post_count}[{$user_data.num_posts}]{/if}{get_title($user_data)} ({$user_data.registered|date_format:$date_format})</div>{foreachelse}<div class="msg">{$lang_search.$No_hits}</div>{/foreach}<div class="con">{$paging_links}</div>{include file='footer.tpl'}

Добавлено спустя   1 минуту  3 секунды:
быдлоШаблон. В смарти вроде есть спец. функции для работы с select и прочее.
Добавлено спустя   6 минут  17 секунд:

get_title($cur_post) в wap/viewtopic.php оказывается показывает ранг пользователя. Admin/Mod/Member etc.
Хоть он нигде не выводился, я прикрутил суда.

Код:

1
span style="color: #0000BB"><?php{* Должность *}{get_title($cur_post)}<br/>{* Когда было размещено сообщение *}{$cur_post.posted|date_format:$date_format}<br/>
tipsun » 2012.03.08 12:50

Это был шаблон для файла: wap/userlist.php

Gemorroj » 2012.03.08 13:06

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

tipsun » 2012.03.08 13:08

Загадками "говоришь" :)
Или я не выспался :D
Добавлено спустя   4 минуты :
быдлоКод, он и на шаблонах быдлоКод :)
Я еще от себя добавил :D
Ну в принципе легче будет разобраться потом, мне кажется.
Добавлено спустя   5 минут  55 секунд:
Я могу свою папку punbb.mod/www/ упаковать. Так сможешь посмотреть.

tipsun » 2012.03.08 13:30

Gemorroj написал:

на код посмотреть.

http://wapinet.ru/files/13311 :: 74269

Gemorroj » 2012.03.08 18:30

а что это за комментарий {* Дополнительные ссылки в футере?

tipsun » 2012.03.08 18:31

Сейчас посмотрю.
Добавлено спустя   3 минуты  51 секунду:
Вот откуда ноги растут.
Еще есть тот же кусок и в другой функции generate_wap_1_navlinks()
include/functions.php#336

Gemorroj » 2012.03.08 19:25

это я понимаю, я не понимаю что оно делает в шаблоне)

tipsun » 2012.03.08 20:15

Хороший вопрос :)
Добавлено спустя   2 минуты  33 секунды:
Самый страшный файл, видимо wap/profile.php - 101 kB (1.6k строк).

tipsun » 2012.03.09 12:53

В принципе ошибки можно наверно так отпустить:

Код:

1
span style="color: #0000BB"><?php// ошибка$smaty->assign('errors', $errors);$smarty->display('template.tpl');// exit();//+ template.tpl{include file='errors.tpl'}{* Etc. *}//- template.tpl
Gemorroj » 2012.03.09 13:53

какой конкретно ошибки?

tipsun » 2012.03.09 18:39

Не знаю почему, но я думал про exit(); ошибки.

Gemorroj » 2012.03.09 18:46

не понимаю, - exit - языковая конструкция, а не ошибка.

tipsun » 2012.03.10 12:34

"wap/index.php" потихоньку собираю.

tipsun » 2012.03.12 11:54

Индексная вроде тоже готова.

Найдите 1 отличие :D (оно есть)

http://wapinet.ru/files/f/1/6/wap-index-php.jpg

Код:

1
span style="color: #0000BB"><?php{include file='header.tpl'}{assign var='date_format' value='%d/%m/%y %H:%I:%S'}{assign var='Show_new_posts' value='Show new posts'}{assign var='Mark_all_as_read' value='Mark all as read'}{assign var='Empty_board' value='Empty board'}{assign var='Link_separator_m' value='|'}<div class="navlinks"> {if $pun_user.is_guest} <a href="login.php">{$lang_common.Login}</a>{$Link_separator_m}<a href="register.php">{$lang_common.Register}</a> {else} {if $pun_user.g_id > $smarty.const.PUN_MOD} <a href="profile.php?id={$pun_user.id}">{$lang_common.Profile} (<span style="font-weight: bold">{$pun_user.username|escape}</span>)</a> {if $pun_config.o_pms_enabled && $pun_user.g_pm == 1} {$Link_separator_m}<a href="message_list.php">{$lang_pms.Private}</a> {/if} {$Link_separator_m}<a href="login.php?action=out&amp;id={$pun_user.id}&amp;csrf_token=">{$lang_common.Logout}</a> {/if} {if $pun_user.g_id < $smarty.const.PUN_MOD} <a href="{$smarty.const.PUN_ROOT}admin_index.php">{$lang_common.Admin_m}</a> {/if} {/if}</div>{assign var='j' value=false}{assign var='cur_category' value=''}{foreach from=$forums item=cur_forum} {if $cur_forum.cid != $cur_category} {assign var='cur_category' value={$cur_forum.cid}} {* assign var='cat_count' value=($cat_count + 1) *} <div class="cat"> <span class="sp_cat">{$cur_forum.cat_name|escape}</span> </div> {/if} <div class="{if $j = ! $j}in{else}in2{/if}"> {if $cur_forum.redirect_url} <a href="{$cur_forum.redirect_url|escape}">{$cur_forum.forum_name|escape}</a> {else} <a href="viewforum.php?id={$cur_forum.fid}">{$cur_forum.forum_name|escape}</a> ({$cur_forum.num_topics}/{$cur_forum.num_posts}) {/if} {if $cur_forum.last_post} <br/> <span class="sub"> » <a href="viewtopic.php?pid={$cur_forum.last_post_id}#p{$cur_forum.last_post_id}">{$cur_forum.subject|escape}</a> ({$cur_forum.last_post|date_format:$date_format} {$lang_common.by} {$cur_forum.last_poster|escape}) </span> {/if} </div>{foreachelse}<div class="in">{$lang_index.$Empty_board}</div>{/foreach}{if ! $pun_user.is_guest}<div class="go_to"><a class="but" href="search.php?action=show_new">{$lang_common.$Show_new_posts}</a><a class="but" href="misc.php?action=markread">{$lang_common.$Mark_all_as_read}</a></div>{/if}{assign var='No_of_users' value='No of users'}{assign var='No_of_topics' value='No of topics'}{assign var='No_of_posts' value='No of posts'}{assign var='Users_online' value='Users online'}{assign var='Guests_online' value='Guests online'}<div class="incqbox">{$lang_index.$No_of_users}: {$stats.total_users}<br/>{$lang_index.$No_of_topics}: {$stats.total_topics}<br/>{$lang_index.$No_of_posts}: {$stats.total_posts}<br/>{if $pun_config.o_users_online == 1}{$lang_index.$Users_online}: {$num_users|default:'0'}<br/>{$lang_index.$Guests_online}: {$num_guests|default:'0'}{if $num_users}</div><div class="act">{$lang_index.Online}:{foreach from=$users item=pun_user_online}<a href="profile.php?id={$pun_user_online.user_id}">{$pun_user_online.ident|escape}</a>{/foreach}{/if}{/if}</div>{include file='footer.tpl'}
tipsun » 2012.03.19 17:03

wap/post.php

Код:

1
span style="color: #0000BB"><?php{include file='header.tpl'}<div class="inbox"><a href="index.php">{$lang_common.Index}</a> »{if $tip}<a href="viewforum.php?id={$cur_posting.id}">{$cur_posting.forum_name|escape}</a>{elseif $fid}{$cur_posting.forum_name|escape}{/if}{if isset($cur_posting.subject)}» {$cur_posting.subject|escape}{/if}</div>{if $errors}{assign var='Post_errors' value='Post errors'}<div class="red">{$lang_post.$Post_errors}</div><div class="msg">{foreach from=$errors item=cur_error}» {$cur_error}<br/>{/foreach}</div>{elseif isset($smarty.post.preview)}{assign var='Post_preview' value='Post preview'}<div class="info">{$lang_post.$Post_preview}</div><div class="msg">{* parse_message($message, $hide_smilies) *}</div>{/if}{assign var='Post_a_reply' value='Post a reply'}{assign var='Post_new_topic' value='Post new topic'}<div class="con">{if $tid} {$lang_post.$Post_a_reply}{elseif $fid} {$lang_post.$Post_new_topic}{/if}</div>{if $tid}<form method="post" action="post.php?action=post&amp;tid={$tid}" {if $file_limit}enctype="multipart/form-data"{/if}>{elseif $fid}<form method="post" action="post.php?action=post&amp;fid={$fid}" enctype="multipart/form-data">{/if}<div class="input">{*if ($pun_config['poll_enabled'] == 1 && $fid) { if (!$_GET['poll']) { include PUN_ROOT.'lang/'.$pun_user['language'].'/poll.php'; echo '<a href="post.php?fid='.$fid.'&amp;poll=1">'.$lang_poll['poll'].'</a><br/>'; } else { include_once PUN_ROOT.'include/poll/poll.inc.php'; $Poll->wap_showContainer(); $cur_index = 8; }}*}<input type="hidden" name="form_sent" value="1" /><input type="hidden" name="form_user" value="{$pun_user.username|escape|default:'Guest'}" />{if $pun_user.is_guest} {assign var='Guest_name' value='Guest name'} <strong>{$lang_post.$Guest_name}</strong><br /> <input type="text" name="req_username" value="{$username|escape}" tabindex="{assign var='cur_index' value=$cur_index+1}" /><br /> {if $pun_config.p_force_guest_email == 1}<strong>{$lang_common.E-mail}</strong>{else}{$lang_common.E-mail}{/if}<br /> <input type="text" name="{if $pun_config.p_force_guest_email == 1}req_email{else}email{/if}" value="{$email|escape}" tabindex="{assign var='cur_index' value=$cur_index+1}" /><br />{/if}{if $fid} <strong>{$lang_common.Subject}</strong><br /> <input type="text" name="req_subject" value="{$subject|escape}" maxlength="70" tabindex="{assign var='cur_index' value=$cur_index+1}" /><br />{/if}<textarea name="req_message" rows="4" cols="24" tabindex="{assign var='cur_index' value=$cur_index+1}">{if $smarty.post.req_message}{$message|escape}{elseif $quote}{$quote}{/if}</textarea><br /><a href="help.php?id=3">{$lang_common.Smilies}</a>{if $pun_config.o_smilies == 1}<span class="green">{$lang_common.on_m}</span>{else}<span class="grey">{$lang_common.off_m}</span>{/if}<a href="help.php?id=1">{$lang_common.BBCode}</a>{if $pun_config.p_message_bbcode == 1}<span class="green">{$lang_common.on_m}</span>{else}<span class="grey">{$lang_common.off_m}</span>{/if}{assign var='img_tag' value='img tag'}<a href="help.php?id=4">{$lang_common.$img_tag}</a>{if $pun_config.p_message_img_tag == 1}<span class="green">{$lang_common.on_m}</span>{else}<span class="grey">{$lang_common.off_m}</span>{/if}</div><div class="input2">{if $pun_user.g_post_replies == 2}<img src="{$pun_config.o_base_url}/include/captcha/captcha.php?{session_name()}={session_id()}" alt="" /><br />{assign var='Image_text' value='Image text'}{$lang_post.$Image_text}<br /><input type="text" name="req_image_" size="16" maxlength="16" /><br />{/if}{assign var='num_to_upload' value=min($file_limit, 20)}{if $can_upload && $num_to_upload > 0} {$lang_fu.Attachments}<br/> {include file='{$smarty.const.PUN_ROOT}include/attach/wap_post_input.php'}{/if}{assign var='Hide_smilies' value='Hide smilies'}{assign var='Merge_posts' value='Merge posts'}{if ! $pun_user.is_guest} {if $pun_config.o_smilies == 1} <input type="checkbox" name="hide_smilies" value="1" tabindex="{assign var='cur_index' value=$cur_index+1}" {if isset($smarty.post.hide_smilies)}checked="checked"{/if} />{$lang_post.$Hide_smilies}<br/> {/if} {if $is_admmod} <input type="checkbox" name="merge" value="1" checked="checked" />{$lang_post.$Merge_posts}<br/> {/if} {if $pun_config.o_subscriptions == 1} <input type="checkbox" name="subscribe" value="1" tabindex="{assign var='cur_index' value=$cur_index+1}" {if isset($smarty.post.subscribe)}checked="checked"{/if} />{$lang_post.Subscribe}<br/> {/if}{elseif $pun_config.o_smilies == 1}<input type="checkbox" name="hide_smilies" value="1" tabindex="{assign var='cur_index' value=$cur_index+1}" {if isset($smary.post.hide_smilies)}checked="checked"{/if} />{$lang_post.$Hide_smilies}{/if}</div><div class="go_to"><input type="hidden" name="form_t" value="{$smarty.server.REQUEST_TIME}" /><input type="submit" name="submit" value="{$lang_common.Submit}" tabindex="{assign var='cur_index' value=$cur_index+1}" accesskey="s" /><input type="submit" name="preview" value="{$lang_post.Preview}" tabindex="{assign var='cur_index' value=$cur_index+1}" accesskey="p" /></div></form>{include file='footer.tpl'}
tipsun » 2012.03.26 22:41

wap/edit.php

Код:

1
span style="color: #0000BB"><?php<div class="inbox"><a href="index.php">{$lang_common.Index}</a> &#187; <a href="viewforum.php?id={$cur_post.fid}">{$cur_post.forum_name|escape}</a> &#187; {$cur_post.subject|escape}</div>{if $errors}<div class="red">{assign var='Post_errors' value='Post errors'}{$lang_post.$Post_errors}</div>{assign var='Post_errors_info' value='Post errors info'}<div class="msg">{$lang_post.$Post_errors_info}{foreach from=$errors item=cur_error}&#187; {$cur_error}<br/>{/foreach}</div>{elseif $smarty.post.preview}{include file='{$smarty.const.PUN_ROOT}include/parser.php'}{assign var='Post_preview' value='Post preview'}<div class="info">{$lang_post.$Post_preview}</div><div class="msg">{* parse_message($message, $hide_smilies) *}</div>{/if}{assign var='Edit_post' value='Edit post'}<div class="con">{$lang_post.$Edit_post}</div><form method="post" action="edit.php?id={$id}&amp;action=edit" enctype="multipart/form-data"><div class="input"><input type="hidden" name="form_sent" value="1" />{if $can_edit_subject}{$lang_common.Subject}<br/><input type="text" name="req_subject" tabindex="{assign var='cur_index' value=$cur_index+1}" value="{{$smarty.post.req_subject|define:$cur_post.subject}|escape}" /><br/><!-- /label -->{/if}{* include file='{$smarty.const.PUN_ROOT}include/attach/fetch.php' *}{$lang_common.Message}:<br/><textarea name="req_message" rows="4" cols="24" tabindex="{assign var='cur_index' value=$cur_index+1}">{{$message|define:$cur_post.message}|escape}</textarea><br/><a href="help.php?id=3">{$lang_common.Smilies}</a>{if $pun_config.o_smilies == 1}<span class="green">{$lang_common.on_m}</span>;{else}<span class="grey">{$lang_common.off_m}</span>;{/if}<a href="help.php?id=1">{$lang_common.BBCode}</a>{if $pun_config.p_message_bbcode == 1}<span class="green">{$lang_common.on_m}</span>;{else}<span class="grey">{$lang_common.off_m}</span>;{/if}{assign var='img_tag' value='img tag'}<a href="help.php?id=4">{$lang_common.$img_tag}</a>{if $pun_config.p_message_img_tag == 1}<span class="green">{$lang_common.on_m}</span>{else}<span class="grey">{$lang_common.off_m}</span>;{/if}<br/>{*$num_to_upload = $file_limit;$num_to_upload = min($num_to_upload, 20);if ($uploaded_to_post || ($can_upload && $num_to_upload > 0)) { //Attachments include PUN_ROOT.'include/attach/wap_view_attachments.php'; if ($can_upload && $num_to_upload > 0) { echo '</div><div class="input2">'.$lang_fu['Choose a file'].'<br/>'; } include PUN_ROOT.'include/attach/wap_post_input.php';}*}{if $pun_config.o_smilies == 1}{assign var='Hide_smilies' value='Hide smilies'}<input type="checkbox" name="hide_smilies" value="1" {if isset($smarty.post.hide_smilies) || $cur_post.hide_smilies == 1}checked="checked"{/if} tabindex="{assign var='cur_index' value=$cur_index+1}" /> {$lang_post.$Hide_smilies}<br/>{/if}{if $is_admmod}<input type="checkbox" name="silent" value="1" tabindex="{assign var='cur_index' value=$cur_index+1}" {if (isset($smarty.post.form_sent) && isset($smarty.post.silent)) || ! isset($smarty.post.form_sent)}checked="checked"{/if} /> {$lang_post.$Silent_edit}<br/>{/if}</div><div class="go_to"><input type="submit" name="submit" value="{$lang_common.Submit}" tabindex="{assign var='cur_index' value=$cur_index+1}" accesskey="s" /><input type="submit" name="preview" value="{$lang_post.Preview}" tabindex="{assign var='cur_index' value=$cur_index+1}" accesskey="p" /></div></form>
LEXIN » 2012.03.27 06:53

tipsun написал:


Индексная вроде тоже готова.

Найдите 1 отличие :D (оно есть)

1. Нет фоновых изображений
2. Добавлена ссылка "RSS"
3. Перед ссылкой "Админ панель" отсутствуют 2 ссылки, а после - еще одна.
4. Жоская генерация. (1331538677.555 s)

На код приятно посмотреть. Круууть :))

Gemorroj » 2012.03.27 10:41

да, шаблонизация рулит. код намного чище

tipsun » 2012.03.27 11:35

LEXIN, :)
Еще есть, где активных показывает форум, там еще строка с ссылками. Это было поле с выбором, оно было выше.
- - - -
Еще я пропускал интимные места, может где забыл "htmlSpecialChars()"/"|escape"
Можно было все в массив занести, и получилось бы что мы 1 раз заносим все переменные, т.е.

Код:

1
span style="color: #0000BB"><?php$allVars = array($title, $users, $trololo);$smarty->assign($allVars);
LEXIN » 2012.03.27 16:24

А как с кешированием дела обстоят? Будет функция кеширования шаблона и очистки кеша?

И очень хочется узнать, какие-нибудь еще "плюшки" в задумке имеются?
Вот оптимизация запросов к БД - отлично.:)

Gemorroj » 2012.03.27 19:30

LEXIN, такими вещами нужно заниматься уже после перевода форума на шаблонную структуру.

tipsun » 2012.04.01 18:51

Взялся за moderate.php
Решил разбивать на moderate.show_delete_topic.tpl; moderate.delete_topic.tpl; итд

Gemorroj » 2012.04.01 18:56

сколько еще файлов не переведенных на шаблонизатор примерно?

tipsun » 2012.04.01 19:00

Ух много. Сейчас посмотрю.
Добавлено спустя   2 минуты  52 секунды:
Легче сказать, сколько переведено:
viewtopic.tpl
viewforum.tpl
userlist.tpl
post.tpl
index.tpl
header.tpl
footer.tpl
edit.tpl
+
moderate
- show_delete_topic.tpl
- move_topic.tpl
- delete_topic.tpl

tipsun » 2012.04.02 21:09

Как надоел этот срач. :(
Пока время есть заставляю себя "копать".
Добавлено спустя   5 минут  99 секунд:
Вроде как viewforum кусок такой был, он опять попался.
Может просто получится все скопировать...

Gemorroj » 2012.04.02 21:26

я тебя предупреждал))
поэтому я и не брался, т.к. трудоемко очень)

tipsun » 2012.04.02 21:36

Да, еще тестить надо. Уф.
Ну по клавишам тыкать, не мешки тоскать. Пофиг.
Тем более вроде как viewforum.tpl вроде как с куском из moderate совпадает, почти.
А viewforum.tpl я сделал четко.

tipsun » 2012.04.07 11:06

Почему-то не могу назначить пользователя модером, вроде все форумы отметил.
P.S. хочу наглядно редачить файл: moderate.php (Шаблоны есть)
В веб-версии нет ссылки "модерировать форум", как у Админа.

Gemorroj » 2012.04.07 11:24

свн обновлял?

tipsun » 2012.04.07 11:51

Нет.

tipsun » 2012.04.07 14:51

Обновился.
Добавлено спустя   6 минут  3 секунды:
Проблема с инклудом файла из кеша.

Код:

1
span style="color: #0000BB"><?php{if $pun_config.o_quickjump == 1 and $basename == 'viewforum.php' || $basename == 'viewtopic.php'} {fetch file="{$smarty.const.PUN_ROOT}cache/cache_wap_quickjump_{$forum_id}.php"}{/if}

.
В конце остается это: '; ?>

tipsun » 2012.04.07 15:09

Вроде синкаксических ошибок в новом шаблоне moderate.tpl нет.

Gemorroj » 2012.04.07 16:10

шаблон покажи

tipsun » 2012.04.07 19:06

moderate.tpl

Код:

1
span style="color: #0000BB"><?php{include file='header.tpl'}{* Навигация: Главная / Форум / Тема *}<div class="inbox"> <a href="index.php">{$lang_common.Index}</a> » {$cur_forum.forum_name|escape}</div><form method="post" action="moderate.php?fid={$fid}">{assign var='date_format' value='%d/%m/%y %H:%I:%S'}{assign var='Post_topic' value='Post topic'}{assign var='Empty_forum' value='Empty forum'}{assign var='Closed_icon_m' value='Closed icon_m'}{assign var='New_icon_m' value='New icon_m'}{assign var='Normal_icon' value='Normal icon'}{assign var='j' value='false'}{foreach from=$topics item=cur_topic}<div class="{if ($j = ! $j)}msg{else}msg2{/if}"><input type="checkbox" name="topics[{$cur_topic.id}]" value="1" />{* +SUBJECT *}<strong>{if $cur_topic.moved_to} {$lang_forum.Moved_m}{elseif $cur_topic.closed} {$lang_common.$Closed_icon_m}{else} {$lang_common.$Normal_icon}{/if} {if $pun_config.poll_enabled == 1 && $cur_topic.has_poll} {$lang_forum.poll_m}{/if}{if $cur_topic.sticky == 1} {$lang_forum.Sticky_m}{/if}</strong>{* // Should we display the dot or not? :) *}{if ! $pun_user.is_guest && $pun_config.o_show_dot == 1 and $cur_topic.has_posted == $pun_user.id}<strong>·</strong>{/if}<a href="viewtopic.php?id={$cur_topic.moved_to|default:$cur_topic.id}">{if $pun_config.o_censoring == 1} {censor_words($cur_topic.subject)|escape}{else} {$cur_topic.subject|escape}{/if}</a>{if $cur_topic.num_pages_topic > 1}[{paginate($cur_topic.num_pages_topic, -1, "viewtopic.php?id={$cur_topic.id}")}]{/if} {$lang_common.by} {$cur_topic.poster|escape}{* -SUBJECT *}{if ! $cur_topic.moved_to} ({$cur_topic.num_replies}/{$cur_topic.num_views}){* ! $cur_topic.moved_to &&*}{if $cur_topic.last_post > $pun_user.last_visit} <span class="red">{$lang_common.$New_icon_m}</span>{/if}<br/><span class="sub">» <a href="viewtopic.php?pid={$cur_topic.last_post_id}#p{$cur_topic.last_post_id}">{$cur_topic.last_post|date_format:$date_format}</a> {$lang_common.by} {$cur_topic.last_poster|escape};</span>{/if}</div>{foreachelse}{assign var='button_status' value='1'}<div class="in">{$lang_forum.$Empty_forum}</div>{/foreach}<div class="con">{$paging_links}</div>{if (! $cur_forum.post_topics && $pun_user.g_post_topics == 1) || $cur_forum.post_topics == 1 || $is_admmod}<div class="go_to"><input type="submit" name="move_topics" value="{$lang_misc.Move}" {if $button_status}disabled="disabled"{/if} /><input type="submit" name="delete_topics" value="{$lang_misc.Delete}" {if $button_status}disabled="disabled"{/if} /><input type="submit" name="open" value="{$lang_misc.Open}" {if $button_status}disabled="disabled"{/if} /><input type="submit" name="close" value="{$lang_misc.Close}" {if $button_status}disabled="disabled"{/if} /></div></form>{/if}{include file='footer.tpl'}
Gemorroj » 2012.04.07 20:23

эээ, так через fetch не выйдет. думаю, нужно сам кэш генерить не в виде php файла, а статичной html-ки уже.

tipsun » 2012.04.07 20:31

Тогда сюда надо смотреть.
Добавлено спустя   6 минут  32 секунды:
А, у меня оказывается уже все сделано. Просто файл 1 раз сгенерился и остался.

Вот вроде:

Код:

1
span style="color: #0000BB"><?php//// Generate WAP quickjump cache PHP scripts//function generate_wap_quickjump_cache($group_id = false){ global $db, $lang_common, $pun_config; // If a group_id was supplied, we generate the quickjump cache for that group only if ($group_id !== false) { $groups[0] = $group_id; } else { // A group_id was now supplied, so we generate the quickjump cache for all groups $result = $db->query('SELECT g_id FROM ' . $db->prefix . 'groups') or error('Unable to fetch user group list', __FILE__, __LINE__, $db->error()); $num_groups = $db->num_rows($result); for ($i = 0; $i < $num_groups; ++$i) { $groups[] = $db->result($result, $i); } } // Loop through the groups in $groups and output the cache for each of them while (list(, $group_id) = @each($groups)) { // Output wap quickjump as PHP code $fh = @fopen(PUN_ROOT . 'cache/cache_wap_quickjump_' . $group_id . '.php', 'wb'); if (! $fh) { error('Unable to write quickjump cache file to cache directory. Please make sure PHP has write access to the directory "cache"', __FILE__, __LINE__); }//тут..............v....................................................................v $output = '<?php if (! defined(\'PUN\')) exit(); define(\'PUN_QJ_LOADED\', 1); ?>' . '<form id="qjump" method="get" action="viewforum.php">' . '<div class="inbox">' . '<label>' . $lang_common['Jump to'] . '<br />' . '<select name="id" onchange="window.location.href=\\\'' . $pun_config['o_base_url'] . '/wap/viewforum.php?id=\\\'+this.options[this.selectedIndex].value;">'; $result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.redirect_url FROM ' . $db->prefix . 'categories AS c INNER JOIN ' . $db->prefix . 'forums AS f ON c.id=f.cat_id LEFT JOIN ' . $db->prefix . 'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=' . $group_id . ') WHERE fp.read_forum IS NULL OR fp.read_forum=1 ORDER BY c.disp_position, c.id, f.disp_position', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error()); $cur_category = 0; while ($cur_forum = $db->fetch_assoc($result)) { // A new category since last iteration? if ($cur_forum['cid'] != $cur_category) { if ($cur_category) { $output .= '</optgroup>'; } $output .= '<optgroup label="' . pun_htmlspecialchars($cur_forum['cat_name']) . '">'; $cur_category = $cur_forum['cid']; } $redirect_tag = ($cur_forum['redirect_url']) ? ' &gt;&gt;&gt;' : ''; $output .= '<option value="' . $cur_forum['fid'] . '"'; if ($group_id == $cur_forum['fid']) { $output .= ' selected="selected"'; } $output .= '>' . pun_htmlspecialchars($cur_forum['forum_name']) . $redirect_tag . '</option>'; } $output .= '</optgroup>' . '</select>' . '<input type="submit" value="' . $lang_common['Go'] . '" accesskey="g" />' . '</label>' . '</div>' . '</form>'; fputs($fh, $output); fclose($fh); }}
Gemorroj » 2012.04.07 21:20

ну так да, метод нужно менять

tipsun » 2012.04.10 17:56

[Ошибка: этот матюк невозможно отобразить буквами]

Ну никак не работала система cache_quickjump.
И так пробовал и сяк.
Я думаю ну что такое же.
Потом уже потеряв надежду поменял require_once на include и заработало. o(o_O)o
Еще поправил условие.
wap/footer.php

Код:

1
span style="color: #0000BB"><?php if (! defined('PUN') or ! defined('PUN_ROOT')) exit();//...................................vif ('viewtopic.php' == $basename or 'viewforum.php' == $basename and $pun_config['o_quickjump'] == 1) { // Load cached quickjump // included quickjump ob_start(); @include PUN_ROOT . 'cache/cache_wap_quickjump_' . $id . '.php'; ob_end_clean(); if (! defined('PUN_QJ_LOADED')) { include PUN_ROOT . 'include/quickjump.php'; }}

Новый файл вроде, я его раньше не замечал.
include/quickjump.php

Код:

1
span style="color: #0000BB"><?php$group_id = $id;if ($group_id !== false) { $groups[0] = $group_id;}else { // A group_id was now supplied, so we generate the quickjump cache for all groups $result = $db->query('SELECT g_id FROM ' . $db->prefix . 'groups') or error('Unable to fetch user group list', __FILE__, __LINE__, $db->error()); $num_groups = $db->num_rows($result); for ($i = 0; $i < $num_groups; ++$i) { $groups[] = $db->result($result, $i); }}// Loop through the groups in $groups and output the cache for each of themwhile (list(, $group_id) = each($groups)) { // Output wap quickjump as PHP code $fh = fopen(PUN_ROOT . 'cache/cache_wap_quickjump_' . $group_id . '.php', 'wb'); if (! $fh) { error('Unable to write quickjump cache file to cache directory. Please make sure PHP has write access to the directory "cache"', __FILE__, __LINE__); } $output = '<?php if (! defined(\'PUN\')) exit(); define(\'PUN_QJ_LOADED\', 1); ?>' . '<form id="qjump" method="get" action="viewforum.php">' . '<div class="inbox">' . '<label>' . $lang_common['Jump to'] . '<br />' . '<select name="id" onchange="window.location.href=\\\'' . $pun_config['o_base_url'] . '/wap/viewforum.php?id=\\\'+this.options[this.selectedIndex].value;">'; $result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.redirect_url FROM ' . $db->prefix . 'categories AS c INNER JOIN ' . $db->prefix . 'forums AS f ON c.id=f.cat_id LEFT JOIN ' . $db->prefix . 'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=' . $group_id . ') WHERE fp.read_forum IS NULL OR fp.read_forum=1 ORDER BY c.disp_position, c.id, f.disp_position', true) or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error()); $cur_category = 0; while ($cur_forum = $db->fetch_assoc($result)) { // A new category since last iteration? if ($cur_forum['cid'] != $cur_category) { if ($cur_category) { $output .= '</optgroup>'; } $output .= '<optgroup label="' . pun_htmlspecialchars($cur_forum['cat_name']) . '">'; $cur_category = $cur_forum['cid']; } $redirect_tag = ($cur_forum['redirect_url']) ? ' &gt;&gt;&gt;' : ''; $output .= '<option value="' . $cur_forum['fid'] . '"'; if ($group_id == $cur_forum['fid']) { $output .= ' selected="selected"'; } $output .= '>' . pun_htmlspecialchars($cur_forum['forum_name']) . $redirect_tag . '</option>'; } $output .= '</optgroup>' . '</select>' . '<input type="submit" value="' . $lang_common['Go'] . '" accesskey="g" />' . '</label>' . '</div>' . '</form>'; fputs($fh, $output); fclose($fh);}
tipsun » 2012.04.10 19:58

Получается, что require_once при отсутствии файла останавливает работу а include нет?

Gemorroj » 2012.04.10 19:58

так да

tipsun » 2012.04.10 20:04

Вывод списка форумов, в которые можно переместить тему, не работает.
Добавлено спустя   1 минуту  1 секунду:
Нашел.

Код:

1
span style="color: #0000BB"><?php while ($forum = $db->fetch_assoc($result)) { //$forums = $forum; $forums[] = $forum; }
tipsun » 2012.04.11 11:11

Не работают ссылки (админа/модера: переместить, удалить, закрыть, открыть) внизу, в футере, в moderate.php все норм.
Там разграничил exit(); после вывода шаблона.
Добавлено спустя   2 минуты  4 секунды:
Т.к. там сразу 2 шаблона выводилось.

Gemorroj » 2012.04.11 11:47

наверное, нужно бранч сделать для всей этой фичи...

tipsun » 2012.04.15 19:58

Commit
Commit failed (details follow):
Server sent unexpected return value (405 Method Not Allowed) in response to
MKACTIVITY request for '/svn/!svn/act/ea721f03-b86c-ee4d-93d9-1fd0cd6c2550'

Gemorroj » 2012.04.15 20:01

url вводи с https

tipsun » 2012.04.15 20:03

1) У меня скачивает с svn.
2) Удаляю то, что скачалось.
3) Закидываю целиком форум, как ты показал, выделил все, кроме [.svn].
4) Жму на папку smarty [commit]
5) Ошибка выходит, которую я запостил.
Добавлено спустя   1 минуту  56 секунд:
Сейчас попробую с https
Добавлено спустя   4 минуты  8 секунд:
Во. Логин и Пароль запросила.
Добавлено спустя   6 минут  9 секунд:
Все, сгенерил пароль.
Добавлено спустя   7 минут  30 секунд:
Commit...

tipsun » 2012.04.15 20:21

Весит много, надо было смарти-двиг не грузить.
Ну да ладно. Главное грузит.

Gemorroj » 2012.04.15 20:23

что значит не надо было? а как без него форум работать-то будет?

tipsun » 2012.04.15 20:32

Залил, все.

Gemorroj » 2012.04.15 20:58

ок, я кое-чего там тоже уже накомитил тебе. обновляйся теперь переодически.
есть еще такие правила:
1) комментарии к коммитам обязательны. хотябы минимально описывай что менялось в сделанном коммите.
2) различные кэши и кастомные настройки не должны попадать в репозитарий.

tipsun » 2012.04.15 21:12

Ок.

tipsun » 2012.04.15 21:24

Да, увидел.
Показывает как было и как стало :)

tipsun » 2012.04.15 21:37

Елки, у меня __DIR__ нет.
И разве нужно для __DIR__ dirName() обработка?

Gemorroj » 2012.04.15 22:10

а где там __DIR__ ?
для __DIR__ не надо, надо для __FILE__, я затупил где-то?
Добавлено спустя   1 минуту  2 секунды:
да, увидел, это я уже на ночь глядя уже торможу.

tipsun » 2012.04.16 14:52

Опять этот cache quickjump не работает. >_<
Cache-файл не сохраняется.

tipsun » 2012.04.16 15:52

Переменная $basename не была задана. >_<

tipsun » 2012.04.16 16:16

Commit.

Gemorroj » 2012.04.16 18:19

ты это в каментах пиши в свн-е)

tipsun » 2012.04.16 20:00

Есть коммент мой там, проверял. :)
Там в changes есть коммент. Если есть еще куда коммент, то как?

tipsun » 2012.04.16 20:17

Все равно костыльно и наверно можно изящно сделать все при помощи смарти и кеши(а).
Ну по крайней мере мне так кажется.

Gemorroj » 2012.04.16 20:19

посмотрел коммиты. да все ок, так и пиши.
и еще, нет функции baseName, есть basename.

tipsun » 2012.04.16 20:20

Хотя там такие же условия будут, просто в шаблоне. :D
Получается не лучше.
- - - -
basename - ok. Буду знать.

tipsun » 2012.04.17 16:58

Commit.

tipsun » 2012.04.28 12:30

Немного наCommitал.
Виден конец кода в файле... profile.php

tipsun » 2012.05.03 15:52

наCommitал.
Недоделан выбор языка. (Забыл че там было).
- - - -
Елки и коммент забыл.

tipsun » 2012.05.08 11:08

Заблудился, где какой шаблон. Вот туман.

tipsun » 2012.05.08 11:43

С языками разобрался.
Commit.
- - - -
БЛЯ!!! Коммент забыл.
Уй, и изменить его целая война.

tipsun » 2012.06.05 12:35

Ы!, эта аватарка меня доведет.
Каждый раз с этой ерундой сталкиваюсь.

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{*$avatar_field
<a href="profile.php?action=upload_avatar&amp;id={$id}">{$lang_profile.$Change_avatar}</a> |
{if $img_size = @getimagesize(PUN_ROOT . $pun_config['o_avatars_dir'] . '/' . $id . '.gif')) {
$avatar_format = 'gif';
} else
if ($img_size = @getimagesize(PUN_ROOT . $pun_config['o_avatars_dir'] . '/' . $id . '.jpg')) {
$avatar_format = 'jpg';
} else
if ($img_size = @getimagesize(PUN_ROOT . $pun_config['o_avatars_dir'] . '/' . $id . '.png')) {
$avatar_format = 'png';
} else {
$avatar_field = '<a class="but" href="profile.php?action=upload_avatar&amp;id=' . $id . '">' . $lang_profile['Upload avatar'] . '</a>';
}
 
// Display the delete avatar link?
if ($img_size) {
$avatar_field .= ' <a href="profile.php?action=delete_avatar&amp;id=' . $id . '">' . $lang_profile['Delete avatar'] . '</a>';
}
 
</div>
*}

Добавлено спустя   4 минуты  32 секунды:
А вот готовое решение нашел.

Код:

1
span style="color: #0000BB"><?php{if $pun_config.o_avatars} {if $user.use_avatar == 1} {if is_file("{$smarty.const.PUN_ROOT}{$pun_config.o_avatars_dir}/{$id}.gif")} <img src="{$smarty.const.PUN_ROOT}{$pun_config.o_avatars_dir}/{$id}.gif" alt="" /> {else} {if is_file("{$smarty.const.PUN_ROOT}{$pun_config.o_avatars_dir}/{$id}.jpg")} <img src="{$smarty.const.PUN_ROOT}{$pun_config.o_avatars_dir}/{$id}.jpg" alt="" /> {else} {if is_file("{$smarty.const.PUN_ROOT}{$pun_config.o_avatars_dir}/{$id}.png")} <img src="{$smarty.const.PUN_ROOT}{$pun_config.o_avatars_dir}/{$id}.png" alt="" /> {else} {$lang_profile.$No_avatar} {/if} {/if} {/if} {else} {$lang_profile.$No_avatar} {/if}<br/>{/if}
tipsun » 2012.06.05 14:40

Немного commit.

tipsun » 2012.06.06 12:32

Еще commit.
Остался раздел "Администрирование".
- - - -
Чет когда переходишь в профиле с вкладки "основной" на другие, то ссылка администрирование пропадает.
- - - -
А, просто не добавил нужные переменные в smarty.

Gemorroj » 2012.06.06 14:15

администрирование можно на потом оставить.
все по публичной части сделано уже?? круто. позже посмотрю.

tipsun » 2012.06.06 14:16

Я имел ввиду файл profile.php :)
Отчет

Показать/Скрыть
//////////////////////////////
0 - не переведен.
1 - переведен.
* - нет разметки.
//////////////////////////////
[*] => antispam_misc.php
[-] => code.php
[1] => delete.php
[1] => edit.php
[1] => filemap.php
[1] => header.php
[1] => help.php
[0] => hide.php
[1] => index.php
[1] => karma.php
[1] => login.php (14/06/12)
[0] => message_delete.php
[0] => message_list.php
[*] => message_popup.php
[0] => message_send.php
[0] => misc.php
[1] => moderate.php
[1] => post.php
[1] => profile.php
[*] => redirect.php
[1] => register.php (14/06/12)
[0] => search.php
[0] => uploads.php
[1] => userlist.php
[1] => viewforum.php
[0] => viewprintable.php
[0] => viewspam.php
[1] => viewtopic.php
//////////////////////////////
9 - не переведено.
15 - переведено.
//////////////////////////////

tipsun » 2012.06.14 15:35

Еще 2 файла: login.php + register.php

Gemorroj » 2012.06.14 18:01

ну, самое сложное переведено =) отлишна

tipsun » 2012.06.23 13:49

wap/help.php не смог с 3 отреком нормально разобраться, ну оригинальную идею не смог перенести на шаблон.
Добавлено спустя   1 минуту  11 секунд:
Там как бы на 1 изображение если есть еще коды-ключи, то показывать в одном диве.

tipsun » 2012.06.25 10:16

Файл wap/hide.php маразм.

tipsun » 2012.06.25 10:31

Так как этот маразм почти полностью совпадает с wap/viewtopic.php, то решил этим воспоьзоватсья. Шаблон взял от viewtopic.tpl

tipsun » 2012.06.25 19:52

Еще, как приду домой, wap/message_delete.php сделаю и отправлю...

tipsun » 2012.06.25 21:17

Commit. Бле! Комментарий забыл.
Добавлено спустя   5 минут  43 секунды:
Что за память. >_<
Добавлено спустя   7 минут  37 секунд:
Если ничего не упустил, остались:
message_list.php
message_send.php
misc.php
search.php
uploads.php
viewprintable.php
viewspam.php

tipsun » 2012.07.03 23:46

Вот message_list.php меня потерял! @_@

tipsun » 2012.07.04 00:04

Вот это (_Y_)
"настройки", "подтв. удаления" отсеки только сделал.
"Входящие", "Исходящие" надо разгребать.

tipsun » 2012.07.04 18:06

Почти готово.
Ошибки надо поправить.
Можно как-то чтоб смарти отображал, где я облажал?

tipsun » 2012.07.04 18:46

Код:

1
span style="color: #0000BB"><?php$smarty->debugging = true;
tipsun » 2012.07.04 19:14

Сделано.
Хоть и коряво <_<
Добавлено спустя   2 минуты  50 секунд:
Commit.

tipsun » 2012.07.04 19:24

Говоря грубо 4 файла/мягко 6 файлов осталось.
Добавлено спустя   1 минуту  1 секунду:
Сегодня еще 1 попробую сделать: message_send.php

tipsun » 2012.07.06 14:19

+ message_send.php

tipsun » 2012.07.13 17:09

+ upload.php
Сейчас интернет будет (через брата телефон), выложу.

tipsun » 2012.07.13 21:33

search.php заставляет напрягать мой мозг. :( уф.

Gemorroj » 2012.07.13 21:41

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

tipsun » 2012.07.13 22:10

Умно :D :)

tipsun » 2012.07.20 14:51

Commit.
Добавлено спустя    51 секунду:
Вроде только wap/viewspam.php остался.

tipsun » 2012.07.20 15:13

Все вроде ^_^

Gemorroj » 2012.07.20 15:58

супер) постараюсь занятся

tipsun » 2012.07.20 23:22

Ну как там, просто хоть посмотрел, кошмар?

Gemorroj » 2012.07.21 00:02

еще не смотрел)

Gemorroj » 2012.07.21 18:36

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

tipsun » 2012.07.22 00:07

Обновил.
Мне что пилить?

Gemorroj » 2012.07.22 00:16

да так. проверяй все ли работает. не работали, например, все сообщения об ошибках. может еще что-то я пропустил.

tipsun » 2012.07.22 00:20

Ок

tipsun » 2012.07.23 22:35

Я тут подумал, может сделать адрес для стиля.css проще:
"../style.css"
Смарти компилирует в известную папку (compile, cache, template, config). Стиль находится выше на 1 директорию.

Gemorroj » 2012.07.23 23:47

так то да, но сейчас там по дефолту вроде некорректно стиль ставится

tipsun » 2012.07.23 23:47

А, там уже по-другому.
Добавлено спустя    35 секунд:
Да, я вот запостил и увидел.

tipsun » 2012.07.27 16:07

Сейчас commit случится.
Добавлено спустя   1 минуту  12 секунд:
Опять коммент забыл. =(

tipsun » 2012.07.27 16:22

Еще 1 в догонку.
Кое-что еще от себя добавил. =)
- - - -
В профиле, при предпросмотре, панель навигации вверху пропадать не будет.

tipsun » 2012.07.27 17:43

Поправка навигации (вверху страницы) в некоторых файлах.

tipsun » 2012.07.28 02:47

Как-то странно получатся. Файлы стилей в одном месте, разметка в другом.
Добавлено спустя   8 минут  54 секунды:
Может надо было в style_wap держать шаблоны, тогда ничего переделывать не придется, чтоб показывать варианты стилей.

tipsun » 2012.07.28 03:06

style_wap/styleName.css
style_wap/styleName/tpls/

tipsun » 2012.07.28 13:59

Тем более там поиск идет так:

Код:

1
span style="color: #0000BB"><?php $styles = array(); $d = dir(PUN_ROOT . 'style_wap'); while (($entry = $d->read()) !== false) { if (substr($entry, strlen($entry) - 4) == '.css') { $styles[] = substr($entry, 0, strlen($entry) - 4); } } $d->close();
tipsun » 2012.07.31 19:23

Надо было значение формата даты не в переменную, а в константу занунуть. :( Ладно исправлюсь.

tipsun » 2012.08.02 19:21

Или переделать везде поиск стиля.css на нынешнее расположение дизайна в виде папок?

Gemorroj » 2012.08.02 19:43

не знаю. расскажи подробнее. я не помню архитектуру.

tipsun » 2012.08.02 21:38

: раньше
/style/
/style_wap/
/style_wap/wap.css
/style_wap/xwab.css
- - - -
: сейчас
/include/template/web/
/include/template/wap/
/include/template/wap/wap/
/include/template/wap/wap/style.css
/include/template/wap/wap/style2.css
/include/template/wap/wap/tpls/
/include/template/wap/xwab/
- - - -
вроде везде повторяется, код который я написал выше.
он показывает возможные варианты выбора.

Gemorroj » 2012.08.02 21:40

tipsun, нет. в template не должно быть файлов доступных для браузеря напрямую.

tipsun » 2012.08.02 21:47

Не обязательно конечно поддержка одной разметкой несколько стилей, но было бы экономней :)
чтоб одну и ту же разметку не копировать для разных стилей.
Добавлено спустя   2 минуты  38 секунд:
Вообщем все как есть оставить, и везде переделать показ вариантов стилей?

Gemorroj » 2012.08.03 10:22

tipsun, об экономии лишнего мегабайта на жестком диске думай в последнюю очередь. разметка будет разной.

tipsun » 2012.08.06 18:36

tipsun написал:

В moderate не могли ссылки действовать из viewtopic.php (уд./пер./закр./сн.)

Fixed
Gemorroj, когда находишься непосредственно в теме форума и видишь ссылки:
Удалить сообщения|Перенести тему|Закрыть тему|Выделить тему
Переходишь по: Удалить сообщения
И тщательно проверяешь :)
Его поправил (он вообще не работал, из-за кривизны моих рук половина кода отсутствовала :D), но мало ли.

tipsun » 2012.08.06 18:55

o(o_O)o WTF?!
В файле wap/post.php тоже целый кусок кода отсутствовал.
Чем я смотрел?!
- - - -
Так, это вроде тоже начало работать...

tipsun » 2012.08.06 19:24

Gemorroj, в wap/edit.php не вижу проблем, вроде редактируемое сообщение показывает. Что не так?
Добавлено спустя   2 минуты  20 секунд:
Предпросмотр? - Поправил.
Добавлено спустя   2 минуты  54 секунды:
Пойду отдыхать :)

Gemorroj » 2012.08.06 21:07

tipsun, да, отсутствовали куски кода. в edit тоже да, вроде бы.
я в отпуск, буду с gprs или как там его, так что хз как смогу програмить.

tipsun » 2012.08.06 21:32

Ну я поправил, посмотрел. Все что видно, работает.

tipsun » 2012.08.07 11:00

tipsun написал:

Тут есть отметка новые посты.
Вот интересно стало, может плагин сделать, чтоб для каждого поста показывало кто прочитал. :) ну отдельно ссылка будет и при переходе на нее (пост +) список прочитавших.
Что плохо, есть кнопка "отметить все как прочитанное", это всю фишку портит.

Вот я сначала не подумал:

Код:

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
SELECT
`p`.`topic_id`,
`p`.`posted`
FROM
`posts` AS `p`
WHERE
`p`.`id` = 31
LIMIT 1;
 
SELECT
COUNT(1)
FROM
`log_topics` AS `lt`
WHERE
`lt`.`log_time` >= 1344284943 AND
`lt`.`topic_id` = 1
LIMIT 1;
 
SELECT
`lt`.`user_id`,
`lt`.`topic_id`,
`lt`.`log_time`,
`u`.`username`
FROM
`log_topics` AS `lt`
LEFT JOIN
`users` AS `u`
ON (`lt`.`user_id` = `u`.`id`)
WHERE
`lt`.`log_time` >= 1344284943 AND
`lt`.`topic_id` = 1
LIMIT 0, 10;

Потом подумал:

Код:

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
SELECT
COUNT(`u`.`id`)
FROM
`log_topics` AS `lt`,
`posts` AS `p`,
`users` AS `u`
WHERE
`lt`.`log_time` >= `p`.`posted` AND
`lt`.`topic_id` = `p`.`topic_id` AND
`lt`.`user_id` = `u`.`id` AND
`p`.`id` = 31
LIMIT 1;
 
SELECT
`u`.`username`
FROM
`log_topics` AS `lt`,
`posts` AS `p`,
`users` AS `u`
WHERE
`lt`.`log_time` >= `p`.`posted` AND
`lt`.`topic_id` = `p`.`topic_id` AND
`lt`.`user_id` = `u`.`id` AND
`p`.`id` = 31
LIMIT 0, 10;

Как правильней?
- - - -
Итог должен быть в виде списка пользователей, которые прочитали пост.
Но моим, как обычно, недалеким соображениям при прочтении нового сообщения ставится куда-то `log_forums` или `log_topics` временная метка нового сообщения.
Надо пойти найти, пошел искать.

tipsun » 2012.08.07 11:11

Может вообще не делать эту ерунду?

Gemorroj » 2012.08.07 11:14

tipsun, попозже можно. сейчас главное основной функционал допилить.

tipsun » 2012.08.07 11:19

Можно только для последнего сообщения темы делать список прочитавших, потому что метка захватит все предыдущие сообщения темы.
Но пользователи не всегда же в одинаковое время читают сообщения.

Gemorroj » 2012.08.07 11:19

с аватарками проблемы. нельзя прикреплять файлы в ответе и редактировании.

tipsun » 2012.08.07 11:20

Gemorroj написал:

с аватарками проблемы. нельзя прикреплять файлы в ответе и редактировании.

Попробую исправить.

Gemorroj » 2012.08.07 11:26

собсно, удаление постов не работает. "Неверный запрос. Ссылка, по которой вы пришли неверная или устаревшая." при клике на "Удалить сообщения".

tipsun » 2012.08.07 11:42

Сегодня исправил, обновлялся?

Код:

1
2
3
4
// from
else exit();
// to
else (! $fid) exit();
Gemorroj » 2012.08.07 11:43

tipsun, да. там не правильно fid передается. сейчас это исправлю.

Gemorroj » 2012.08.07 11:59

нет пагинации в модерировании форума.

tipsun » 2012.08.07 13:30

Gemorroj написал:

нельзя прикреплять файлы в ответе и редактировании.

Можно =)
Добавлено спустя   3 минуты  14 секунд:
Пока я 1 коммитнул ты уже 6 раз. Скорострел :D

Gemorroj » 2012.08.07 13:41

edit теперь не работает. проверяй перед комитами.
Добавлено спустя   3 минуты  25 секунд:
я сейчас уезжаю, буду вечером только.  посмотри как выглядят edit и post. они отличаются. вероятно, что-то не так.

tipsun » 2012.08.07 13:46

Gemorroj написал:

нет пагинации в модерировании форума.

Есть.
Добавлено спустя    57 секунд:

Gemorroj написал:

edit теперь не работает. проверяй перед комитами.
Добавлено спустя   3 минуты  25 секунд:
я сейчас уезжаю, буду вечером только.  посмотри как выглядят edit и post. они отличаются. вероятно, что-то не так.

Ок

tipsun » 2012.08.07 14:03

Gemorroj написал:

edit теперь не работает.

Вроде сейчас работает. 1 условие добавил.

tipsun » 2012.08.08 11:37

Есть еще где ошибки?

Gemorroj » 2012.08.08 13:06

да. думаю еще много. как минимум сейчас зашел сразу вижу - нет заголовка в "Удалить сообщения". В модерировании топиков, топики всегда помечены как новые.
По самим шаблонам - в них многовато логики, которой в шаблонах быть не должно. Нужно будет вынести все parse_message, если еще остались где-то из шаблонов в php код. Да и все остальные php функции нужно будет убрать из шаблонов. Либо сделать отдельный класс с вспомогательными php методами только для шаблонов.

tipsun » 2012.08.08 13:16

Под логикой ты подразумеваешь if?
Типа шаблон решает что отображать?

Gemorroj » 2012.08.08 13:24

tipsun, нет. я имею ввиду parse_message, get_title и прочие функции форума, которые используются в шаблонах.

tipsun » 2012.08.08 13:28

Ок. Буду исправлять.

Gemorroj » 2012.08.08 13:43

message_popup еще сделать надо.

Gemorroj » 2012.08.08 20:22

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

tipsun » 2012.08.09 19:08

Commit "Fix navigation".
Знаю, сам не доволен, халтура. :(
Потом поподробней посмотрю.

tipsun » 2012.08.09 19:37

Сделаю проверку в подключаемом шаблоне (profile.navi.tpl) - показывать ссылки или нет и как.
- - - -
Или оставить как есть?

Код:

1
span style="color: #0000BB"><?php{if $id == $pun_user.id or $pun_user.g_id == $smarty.const.PUN_MOD || $pun_user.g_id == $smarty.const.PUN_ADMIN}{include file='profile.navi.tpl'}{/if}

Добавлено спустя   3 минуты  53 секунды:
Просто в одном месте у меня получилось так:

Код:

1
span style="color: #0000BB"><?php{if $id == $pun_user.id or $pun_user.g_id == $smarty.const.PUN_MOD || $pun_user.g_id == $smarty.const.PUN_ADMIN}{include file='profile.navi.tpl'} {* Уже содержит навигацию, то что ниже + ссылки. *}{else} {assign var='Profile_menu' value='Profile menu'} {* Навигация: Главная / Профиль *} <div class="inbox"> <a href="index.php">{$lang_common.Index}</a>&#160;&#187;&#160;{$lang_profile.$Profile_menu} </div>{/if}
tipsun » 2012.08.09 19:57

Gemorroj написал:

посмотри сколько кидается нотисов.

Как и где?
- - - -
Я включил в wap/header.php отладку
Нет нигде ошибок или я не туда смотрю.

Код:

1
span style="color: #0000BB"><?php$smarty->error_reporting = true;$smarty->debugging = true;
tipsun » 2012.08.09 20:32

Вот /wap/misc.php не работает. Fixed.

Gemorroj » 2012.08.09 22:04

в шаблоне не сокращай navi.
smarty дебаг не трогай. в .htaccess error_reporting -1 и error_log куда тебе нравится.

tipsun » 2012.08.09 22:10

Gemorroj написал:

в шаблоне не сокращай navi.

в смысле? Полностью писать *.navigation.tpl?

tipsun » 2012.08.09 22:45

Gemorroj написал:

в .htaccess error_reporting -1 и error_log куда тебе нравится.

Круто =)
Добавлено спустя   6 минут  51 секунду:
Ну в footer.tpl понятное дело. Он везде, но не везде нужные данные.

Gemorroj » 2012.08.10 00:40

tipsun, да, navigation

tipsun » 2012.08.10 15:30

Не нашел

Показать/Скрыть
[10-Aug-2012 15:18:58] PHP Notice:  Undefined index:  35 in W:\home\punbb.mod\smarty\include\template\wap\wap\compiled\984eee899978ed82b83636be7cb859bc46b211e5.file.viewtopic.tpl.php on line 236

tipsun » 2012.08.10 18:55

Commit. Совсем чуть поправок.
Еще остались непроверенные файлы.

Gemorroj » 2012.08.10 21:26

не пиши нанофикс и т.п. пиши развернутые комментарии) а так ок все. выберусь из гомеля займусь тоже

tipsun » 2012.08.10 21:29

Ок.

tipsun » 2012.08.11 00:20

Commit + Comment.
Этой работой я доболен, практически на 90%.
Индексный шаблон большой.
Все переменные не посмотрел.
Вдруг лишние есть, надо досмотреть...

tipsun » 2012.08.11 10:13

Надо чтоб шаблоны без лишних "\s" and "\n" компилировались.

tipsun » 2012.08.11 10:48

Оповещение о новых личных сообщениях должно по всему сайту быть или толко на главной?

tipsun » 2012.08.11 11:22

Помоему я ошибся с последним commit.
Что-то должно быть в header, что-то в index.

tipsun » 2012.08.11 16:17

Еще есть исправления, там conditions не работает. Я его поправил, но не залил.

Gemorroj » 2012.08.11 16:47

147, 148 коммиты хорошие)

tipsun » 2012.08.11 19:54

Gemorroj, не убегай от вопросов :)
Как там располагаются оповещения?
Оповещение о:
- новом сообщении: везде, но на главной надо пропустить вперед логотип и еще что-то, я не могу в исходнике ничего понять, запутанно.

tipsun » 2012.08.11 21:00

Вообщем commit.
В отдельном шалоне все оповещения, если я лишние внес, легче найти и исправить будет

tipsun » 2012.08.16 19:48

Функция показа аватарки не совсем подходит под раздел профиль. Либо там приспосабливать, что я сделал, либо функцию сделать более гибкой.
Добавлено спустя   1 минуту  8 секунд:
Сейчас посмотрю, если есть что commit - сделаю.

tipsun » 2012.08.18 19:13

А так нельзя сделать?:

Код:

1
span style="color: #0000BB"><?php//{censor_words($cur_topic.subject)|escape}{$cur_topic.subject|censor_words|escape}

Или делать как до этого ты показал, ну в логике.

Gemorroj » 2012.08.18 20:06

в логике надо делать

tipsun » 2012.08.21 21:42

НаCommitал чуть.
Остальное не хочу, не закончил полностью файл.
Потом забуду, где ковырял.

tipsun » 2012.08.21 23:12

Шаблон viewforum.tpl не отметил на commit. :(

Gemorroj » 2012.08.22 11:37

// Гость записанный в таблице пользователей (`users`) имеет id = 1. Зачем тогда его учитывать?
if (1 > $id) {

wap/karma.php
аналогичную проверку нужно сделать и в web версии. они должны иметь одинаковую логику же.
и еще, в форуме вроде бы есть константа идентифицирующая группы пользователей, нужно использовать ее. а не цифру 1.

tipsun » 2012.08.22 11:44

Gemorroj, ок. Исправлю.

tipsun » 2012.08.22 16:32

Так?
Добавлено спустя   3 минуты  40 секунд:
Я еще кое-что от себя добавил. Можно и убрать.
Если ссылки на пост нет, редирект не выполняется, следует показ истории кармы.

Gemorroj » 2012.08.22 17:05

wap/karma.php

$id =& $to;

зачем ссылка?

tipsun » 2012.08.22 17:07

Не знаю. Эээксперименты. :)
Добавлено спустя   3 минуты  38 секунд:
Неправильно?

Gemorroj » 2012.08.22 17:55

не нужна она там. вообще, ссылки не используй без явной необходимости.

tipsun » 2012.08.22 18:14

Ок.

tipsun » 2012.08.22 18:48

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

tipsun » 2012.08.23 20:43

Надо либо часто коммиты делать, либо записывать все, либо память тренировать. Все забываю.

tipsun » 2012.08.23 21:38

Все залил.
Добавлено спустя   1 минуту  10 секунд:
Догадался таки слить оригинал с репозитария, чтоб по нему ориентироваться, смотреть может где не так условие поставил.

tipsun » 2012.08.23 22:52

Удалил бред с karma.
Просто скопировал лишнее.
И все равно во всем wap-форуме нет конкретных действий к $db->fetch() при возвращении значения false.
Только к $db->query(); [error()]

Dark Gemorroj » 2013.01.27 20:07

Что за волшебный код в include/quickjump.php?
Что за return без функции? Что за include в переменную?

Gemorroj » 2013.01.27 20:26

Dark Gemorroj написал:

Что за волшебный код в include/quickjump.php?
Что за return без функции? Что за include в переменную?

include. Вот так оно работает. Очень удобно, иногда.

tipsun » 2013.01.27 20:28

У меня не работает.

Показать/Скрыть
Ошибка синтаксического анализа XML: лишние данные после элемента документа
Адрес: http://smarty.punbb.mod/wap/viewtopic.php?pid=10#p10
Строка 1, символ 663:<form id="qjump" method="get" action="viewforum.php"><div class="inbox"><label>Перейти<br /><select name="id" onchange="window.location.assign('http://smarty.punbb.mod/wap/viewforum.php?id='+this.options[this.selectedIndex].value);"><optgroup label="Cat1"><option value="1" selected="selected">Cat1Forum1</option><option value="2">Cat1Forum2</option></optgroup><optgroup label="Cat2"><option value="3">Cat2Forum1</option><option value="4">Cat2Forum2</option></optgroup><optgroup label="Cat3"><option value="5">Cat3Forum1</option><option value="6">Cat3Forum2</option></optgroup></select><input type="submit" value=" Перейти " accesskey="g" /></label></div></form><?xml version="1.0" encoding="UTF-8"?>

Добавлено спустя    47 секунд:
И, кстати, спасибо за инфу. :)

Gemorroj » 2013.01.27 20:32

зайди в админку и перегенери кэш.

tipsun » 2013.01.27 20:34

Волшебник, такой волшебник. :D

tipsun » 2013.01.27 20:41

Она все-таки попалась:

Показать/Скрыть
Notice:  imagecolorat() [<a href='function.imagecolorat'>function.imagecolorat</a>]: 26,45 is out of bounds in S:\home\punbb.mod\smarty\include\captcha\kcaptcha.php on line 108

Добавлено спустя   1 минуту  56 секунд:
Эдак раз 818 :D

tipsun » 2013.01.27 20:44

Показать/Скрыть
[01-Dec-2012 11:33:02 UTC] PHP Notice:  imagecolorat() [<a href='function.imagecolorat'>function.imagecolorat</a>]: 68,-1 is out of bounds in S:\home\punbb.mod\smarty\include\captcha\kcaptcha.php on line 108

Gemorroj » 2013.01.27 21:14

tipsun, это не трогай. ошибки в сторонних либах не трогай.

tipsun » 2013.01.27 23:59

Больше 3х категорий в форуме не отображается. Ни в web, ни в wap.