Re: [Релиз] AnyCode Tool (1.0.0 Beta)
конечно, вариант добавить поле в таблицу posts с кодом страны и дергать картинку оттуда
Кстати вариант, почему нет.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
PunBB 1.3 → Расширения v1.3 → [Релиз] AnyCode Tool (1.0.0 Beta)
конечно, вариант добавить поле в таблицу posts с кодом страны и дергать картинку оттуда
Кстати вариант, почему нет.
Задача:
Поместить значек ICQ, который меняется в зависимости от статуса.
Решение
Воспользоваться соответствующим сервисом на ICQ.
Название: - ICQ_status
Хук№1: vt_row_pre_post_contacts_merge
/////////- Аськин статус -//////////////////////
if (!empty($cur_post['icq'])){
if (!$forum_user['is_guest']) {
$forum_page['author_ident']['icq'] = '
<a href="http://www.icq.com/people/webmsg.php?to='.forum_htmlencode($cur_post['icq']).' target="_blank" onClick="window.open(\'http://www.icq.com/people/webmsg.php?to='.forum_htmlencode($cur_post['icq']).'\',\'\',\'width=503,height=535\');return(false);"">
<script type="text/javascript">
<!--
document.write(\'<img border="0" src="http://status.icq.com/online.gif?icq='.forum_htmlencode($cur_post['icq']).'&img=27&rnd=\'+Math.rnd+\'border="0" width="16" height="16" style="padding-top: 10px"/> '.forum_htmlencode($cur_post['icq']).'\')
//-->
</script>
<noscript>
<img src="http://status.icq.com/online.gif?icq='.forum_htmlencode($cur_post['icq']).'&img=27" border="0" width="16" height="16" style="padding-top: 10px"/> '.forum_htmlencode($cur_post['icq']).'</noscript></a>';
}
}
//////////////////////////////Хук№2: vt_qr_get_posts (упростил)
$query['SELECT'] .= ', u.icq';![]()
Добавлено спустя 14 минут 24 секунды:

да, это можно и нужно упростить:
$query['SELECT'] .= ', u.icq';Добавлено спустя 1 минуту 25 секунд:
Поясняю, query уже сформирован, нет нужды его формировать заново, достаточно добавить к нему свои потребности, в данном случае нам надо в селект вставить u.icq, что мы и делаем.
Спасибо. я просто не знал как это реализовать. ![]()
Здорово конечно. Но позвольте мне немного отойти от темы. Насколько это реально используется посетителями форумов? Видел такие шашечки, но не понимал смысла.
Незнаю, но в принципе на форумах всякого рода поддержки контакт всегда перед глазами будет.
hcs - подскажи пожалуйста, тут в 2х хуках "vt_start" как их добавить так чтоб не глючило?
А в чем проблема? У разных решений разная область "видимости" хуков, код одних и тех же хуков, вызываемых разными расширениями будет вызываться поочередно.
Или я что-то не понял?
А в чем проблема? У разных решений разная область "видимости" хуков, код одних и тех же хуков, вызываемых разными расширениями будет вызываться поочередно.
Или я что-то не понял?
Ну вполне возможно что я не так понимаю просто я пробывал добавить 2й он мне написал ошибку... вот я написал "vt_start_1" вот так всё встало только ошибка пишется в написание ответов....
Notice: Undefined variable: lang_hcsmrg in /home/......./viewtopic.php(635) : eval()'d code on line 13вот у меня такая проблема... я просто может не до конца еще понял как работать с хуками...
Ты видимо вставил хук в другое решение, в данном случае в склейку сообщений.
2 одинаковых хука не могут быть в одном решении.
Объясняю популярно.
Хук vt_start - это место, в vietopic.php, в котором скрипт начнет вызывать код хранящийся в бд (или манифестах) по очереди.
Как организован этот вызываемый код:
этот код идентифицируется по имени расширения (или решения в случае с anycodetool), например:
номер имя_решения имя_хука исполняемый_код
1 pun_poll vt_start <?php echo "hello world" ?>
2 pun_quote vt_start <?php echo "hello world2" ?>
Как видно из таблицы у разных расширений в столбце "имя хука" присутствует одинаковый хук.
Согласно этой таблице система извлечет код из столбца "исполняемый код" и исполнит его, в месте вызова хука vt_strt (не забываем что этот вызов в viewtopic.php) по очереди, согласно номеру в таблице.
Все некогда, напишу вечером, если будут еще вопросы
Всё понял как это работает))) очень удобная штука... хуки спасибо hcs за помощь) всё оказывается еще проще чем я думал) Я не понял сразу что солюшен или как его надо имя давать)
Notice: Undefined index: Today online in /home/signend/public_html/talk/index.php(360) : eval()'d code on line 40
talk
Подскажите как вылечить эту болезнь? возникла при установке этого расширения
решение - today_users
хук - in_info_end//************************************************************************ // knyshow // список юзеров за сегодня //************************************************************************ $todays_users = array(); $query = array( 'SELECT' => 'id, username', 'FROM' => 'users', 'WHERE' => 'last_visit>"'.strtotime(gmdate("M d Y")).'"', 'ORDER BY' => 'username' ); $result = $forum_db->query_build($query) or error(__FILE__, __LINE__); while(list($id, $username) = $forum_db->fetch_row($result)) { if (!$forum_user['is_guest']) { $todays_users[] = '<a href="'.forum_link($forum_url['user'], $id).'">'.forum_htmlencode($username).'</a>'; } else { $todays_users[] = forum_htmlencode($username); } } if (!empty($todays_users)) { ?> <div id="brd-todayonline" class="gen-content"> <h3 class="hn"><span> <? echo $lang_index['Today online'] . implode(', ', $todays_users); ?> </span></h3> </div> <? }
Лучше взять расширение online plus, там больше фишек и настроек.
Подскажите как вылечить эту болезнь?
Вариант 1:
Заменить строку
echo $lang_index['Today online'] . implode(', ', $todays_users);на
echo 'Сегодня были замечены: ' . implode(', ', $todays_users);Вариант 2:
Добавить строку
'Today online' => 'Сегодня были замечены: 'в конец файла
lang\Russian\index.phpну и аналогично для других используемых языков форума.
hcs, 
Оформление заголовка темы:
Решение: Format_title_post
Хук: po_pre_add_topic
Код:
function my_ucfirst($string, $e ='utf-8') {
if (function_exists('mb_strtoupper') && function_exists('mb_substr') && !empty($string)) {
$string = mb_strtolower($string, $e);
$upper = mb_strtoupper($string, $e);
preg_match('#(.)#us', $upper, $matches);
$string = $matches[1] . mb_substr($string, 1, mb_strlen($string, $e), $e);
} else {
$string = ucfirst($string);
}
return $string;
}
$post_info['subject'] = my_ucfirst(mb_strtolower($post_info['subject'], 'UTF8'));Соотвественно требуется чтобы в похапе был скомпилирован с поддержкой мультибайт строк.
Добавлено спустя 8 минут 53 секунды:
Удаление неактивированных ботов. Руками чистить лень, потому наваял небольшой хук.
Решение: delete_users
Хук: ain_start
Код Postgre!!!:
$query = "DELETE FROM forum_users WHERE id>1 AND group_id = 0 AND registered < timestamptz_to_epoch(current_timestamp - interval '3 day')";
$result = $forum_db->query($query) or error(__FILE__, __LINE__);Функции для работы с обычным timestamp в Postgre:
CREATE OR REPLACE FUNCTION "public"."timestamp_to_epoch" (timestamp) RETURNS double precision AS
$body$
-- Here we assume input timestamp is relative to UTC!
SELECT EXTRACT(EPOCH FROM $1 AT TIME ZONE 'UTC');
$body$
LANGUAGE 'sql' IMMUTABLE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
CREATE OR REPLACE FUNCTION "public"."epoch_to_timestamp" (double precision) RETURNS TIMESTAMP WITHOUT TIME ZONE AS
$body$
SELECT ('epoch'::timestamp + $1 * '1 second'::interval)::timestamp;
$body$
LANGUAGE 'sql' IMMUTABLE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
CREATE OR REPLACE FUNCTION "public"."timestamptz_to_epoch" (timestamptz) RETURNS double precision AS
$body$
SELECT EXTRACT(EPOCH FROM $1);
$body$
LANGUAGE 'sql' IMMUTABLE RETURNS NULL ON NULL INPUT SECURITY INVOKER;
CREATE OR REPLACE FUNCTION "public"."epoch_to_timestamptz" (double precision) RETURNS TIMESTAMP WITH TIME ZONE AS
$body$
SELECT ('epoch'::timestamptz + $1 * '1 second'::interval)::timestamptz;
$body$
LANGUAGE 'sql' IMMUTABLE RETURNS NULL ON NULL INPUT SECURITY INVOKER;То есть всех пользователей которые зарегистрировались раньше 3 дней, и не активировали себя (group_id = 0) мы посылаем в лес. Как это будет в мускуле не знаю. BTW between
а что он делает то этот хук? Оформление заголовка темы: (с) как то не о чем не сказало... как их оформляет или что он вообще позволяет делать?
"ВОТ ЭТОТ УЖАС" и "вот этот" в заголовках приводит к такому: "Этот ужас"
Описание: данное решение удаляет подписи при просмотре темы у всех, у кого сообщений меньше 10. Смысл - борьба со спамерами, оставляющими бестолковые сообщения ради ссылки в подписи. Обычно спамеры ставляют 1-2 сообщения.
Решение: anti_signature
хук: vt_row_pre_display
код хука:
if ($cur_post['num_posts'] < 10)
$forum_page['message']['signature'] = '';Меняйте число 10 в коде хука на любое по вашему усмотрению.
Описание: Добавляет возможность вставлять в сообщения flash-видео.
Решение: EmbeddVideo
Хук: ps_parse_message_end
Код:
//Yandex.Video & RuTube flash video:
$text = preg_replace("#\[flash=([0-9]{3}),([0-9]{3}),(.+?)\]#is",
'<object type="application/x-shockwave-flash" data="$3" width="$1" height="$2">
<param name="movie" value="$3" />
<param name="loop" value="false" />
<param name="menu" value="false" />
<param name="quality" value="best" />
<param name="scale" value="noborder" />
<param name="wmode" value="transparent" />
<param name="bgcolor" value="#FFFFFF" /></object>',$text);
//the end of Yandex.Video & RuTube flash video:Вставляем видео через новый тег [flash =ширина, высота, адрес_видео]
Отличное решение, для него еще надо хинт в страницу по бб-кодам и кнопку в бб-панель
padizar, как вариант, хук in_qr_get_cats_and_forums изменить к виду:
$query['SELECT'] .=', IF(CHAR_LENGTH(t.subject)<20, t.subject, CONCAT(LEFT(t.subject, 20), "...")) as subject'; $query['JOINS'][] = array( 'LEFT JOIN' => 'topics AS t', 'ON' => 'f.last_post_id=t.last_post_id' );где IF(CHAR_LENGTH(t.subject)<20, t.subject, CONCAT(LEFT(t.subject, 20), "...")) обрезает длину темы до 20 символов, если ее длина была больше 20 и добавляет "..." в конце. такое решения использую я.
подскажите плиз, а как к ссылке на последнее сообщение, т.е. к "обрезанной теме" сообщения, прикрутить alt="" с полной темой, ну чтоб когда на ссылку курсор наводишь, появлялась полная, не обрезанная тема... таким образом ее можно было бы предварительно увидеть наведя курсор мыши на обрезанный заголовок
т.е. к "обрезанной теме" сообщения, прикрутить alt="" с полной темой
насколько я помню, это не alt, а title?
хук in_qr_get_cats_and_forums
$query['SELECT'] .=', IF(CHAR_LENGTH(t.subject)<=25, t.subject, CONCAT(LEFT(t.subject, 22), "...")) as short_subject, t.subject';
$query['JOINS'][] = array(
'LEFT JOIN' => 'topics AS t',
'ON' => 'f.last_post_id=t.last_post_id'
);хук in_normal_row_pre_display
$forum_page['item_body']['info']['lastpost'] = str_replace(array(format_time($cur_forum['last_post']), '<cite>'),array(forum_htmlencode($cur_forum['short_subject']), '<cite>'.format_time($cur_forum['last_post']).'</cite><cite>'),
$forum_page['item_body']['info']['lastpost']);
if(strlen($cur_forum['subject']) > strlen($cur_forum['short_subject']))
{
$forum_page['item_body']['info']['lastpost'] = str_replace('<a href="','<a title="'.forum_htmlencode($cur_forum['subject']).'" href="',
$forum_page['item_body']['info']['lastpost']);
}решения бывают и менее кривые, правда...
решения бывают и менее кривые, правда...
ага, спасибо огромное! ![]()
P.S: а не кто не пробывал сделать описание к темам топиков?
решение: update_user_post_count_on_post_delete
хук dl_post_deleted_pre_redirect:
//=======================================================
// обновление счетчика постов пользователей при удалении любого сообщения
//=======================================================
$result = $forum_db->query("UPDATE users b, (SELECT poster_id, count(id) AS kol FROM posts GROUP BY poster_id) a SET b.num_posts = a.kol WHERE b.id = a.poster_id");
//=======================================================запрос бы перерисовать под билдер...
не работает как было у меня 928 так и осталось, хоть и удалил 2 поста ![]()
PunBB 1.3 → Расширения v1.3 → [Релиз] AnyCode Tool (1.0.0 Beta)
Форум работает на PunBB, при поддержке Informer Technologies, Inc
Сгенерировано за 0.096 секунды (85% PHP — 15% БД) 11 запросов к базе данных
Технологии с открытым исходным кодом, несомненно, обладают серьезным преимуществом над аналогичными продуктами, распространяемыми по ограниченным лицензиям. И совершенно неважно, что это. Возможно это:
Впрочем, неважно. Что бы это ни было, важно всячески поощрять и поддерживать Open Source в любом виде. Тем более, что вы знаете, PunBB распространяется по лицензии GPL/GNU. И спасибо за внимание.