Тема: Медали, отличие, и т.п.

Везде искал для punbb.
Наткнулся на Flazy. Проект очень понравился.

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

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

2

Ответ: Медали, отличие, и т.п.

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

Вы стали счастливие?

3

Ответ: Медали, отличие, и т.п.

У пользователей, под аватаркой должна появиться дополнительная строчка. Выглядит примерно так:
http://i071.radikal.ru/0902/bd/5948b3545dbe.jpg
Соответственно, у кого нет наград, у того такой строки нет.

В админке должен быть раздел, где можно:
1. Добавлять медали, указывая внешний вид медальки и название на русском.
2. Добавлять определенному пользователю медальку, из тех, что уже есть, указав за что. Причем, если у него уже есть медали, то новая медаль просто добавляется, ни в коем случае не заменяет ту что есть.
3. Соответственно возможность убрать медальку у пользователя.

В принципе все. Я бы сам сделал, но увы, в php не столь селен.

Если нужно примерно сделать накидки, как должно выглядеть в админке могу сделать.

Отредактировал De-Luxis (2009-02-15 16:22:15)

4

Ответ: Медали, отличие, и т.п.

Это кстати не только актуально будет для кланов, но вообще.
Например если хочется наградить юзера за, то что он помог в написании программы, или активно помогает.
Или как на ekabu.ru дать рыбку и пиво smile

5

Ответ: Медали, отличие, и т.п.

Могу сказать точно что это расширение будет написано, но не сейчас. Уже несколько человек интересовались по поводу данного функционала.
Пока могу только рассчитывать на стороннюю помощь, ибо не хватает свободного времени.

Вы стали счастливие?

6

Ответ: Медали, отличие, и т.п.

Жаль что у такого человека с тавим золотым проектом нет времени.
Еще было бы хорошо, если бы расширение было совместимым с punbb1.3 так можно Flazy буд за одно раскрутить в массах.

7

Ответ: Медали, отличие, и т.п.

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

Насчёт совместимости, скорее всего да, но во главе только Flazy, если будут проблемы, которые будут мешать, приоритет будет отдан работе на Flazy, чем на PunBB.

Вы стали счастливие?

8

Ответ: Медали, отличие, и т.п.

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

В базе создал таблицу flazy_medals вот такого вида:
http://s58.radikal.ru/i162/0904/9f/945844d70822.jpg

В файле viewtopic.php добавил строки:
691 строка

$query = array(
    'SELECT'    => 'm.medal, m.des_medal, m.id_user, m.id, u.email, u.title, u.sex, u.country, u.signature, u.email_setting, u.num_posts, u.admin_note, u.user_agent, u.rep_plus, u.rep_minus, u.rep_enable, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online, r.id AS reported',
    'FROM'        => 'posts AS p',
    'JOINS'        => array(
        array(
            'INNER JOIN'    => 'users AS u',
            'ON'        => 'u.id=p.poster_id'
        ),
        array(
            'INNER JOIN'    => 'groups AS g',
            'ON'        => 'g.g_id=u.group_id'
        ),
        array(
            'LEFT JOIN'    => 'online AS o',
            'ON'        => 'o.user_id=u.id AND o.user_id!=1 AND o.idle=0'
        ),
        array(
            'LEFT JOIN'    => 'reports AS r',
            'ON'        => 'r.post_id=p.id AND r.zapped IS NULL'
        ),
        /*Медали*/
        array(
            'INNER JOIN'    => 'medals AS m',
            'ON'        => 'p.poster_id=m.id_user'
        ),
        /*end medals*/

877 строка перед         ($hook = get_hook('vt_row_pre_post_contacts_merge')) ? eval($hook) : null;

    $forum_page['author_info']['medals'] = '<img class="popup" src="'.$base_url.'/img/medals/'.forum_htmlencode($cur_post['medal']).'" title="'.forum_htmlencode($cur_post['des_medal']).'"/>';
    

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

Теперь о проблемах, с которыми столкнулся:
http://s61.radikal.ru/i171/0904/10/f73133442a8bt.jpg
Когда добавил 2му юзеру вторую медальку, пост клонировался.
Пробовал добавить

$forum_page['author_info']['medals'] = '<img cl 

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

Это я так понял нужно реализовать через цикл, но как не знаю.
http://s48.radikal.ru/i119/0904/d7/8cf775f18212.png

Ребят, помогите пожалуйста.  sorry

9

Ответ: Медали, отличие, и т.п.

Правильней будет сделать разделение на две таблицы, одну со списком медалей, вторую с их назначением участникам. Или вариант, оставить одну таблицу с описанием, а данные по назначениям заносить в users через запятую, впринцапе это должно решить проблему клонирования, то циклы не есть хорошо=)

Вы стали счастливие?

10

Ответ: Медали, отличие, и т.п.

Да делал я типа такого.
Пробовал весь html в ячейку записать, на выходи он знаки типа < или " заменяет на &123 например.
Если через запятую, то там массив. Знак пробела заменяет %20.
Как сделать что бы он чисто все передавал еще не допер.

11

Ответ: Медали, отличие, и т.п.

Если хотите могу дать доступ к свн, выложите исходники и поковыряем вместе smile

Вы стали счастливие?

12

Ответ: Медали, отличие, и т.п.

В общем пошел первым путем. Создал в бд юзер, таблицу madel
в строке 877 вместо той, вставил:

$medal = str_replace(array('&lt;','&gt;','&quot;'), array('<','>','"'), forum_htmlencode($cur_post['medal']));
        $forum_page['author_info']['medals'] = $medal;

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

Редактируется все это в профиле.

Скоро выложу тут.

13

Ответ: Медали, отличие, и т.п.

Хотел сделать как расширение, выдает сообщение:

Загрузка расширения «dl_html_users» завершилась неудачей.
Не удалось обработать manifest.xml.

Содержимое манифеста:

<?xml version="1.0" encoding="utf-8"?>

<extension engine="1.0">
    <id>dl_html_users</id>
    <title>dl_html_users</title>
    <version>1.0</version>
    <description>Позволяет вставлять html код, в профиль пользователей.</description>
    <author>De-Luxis</author>
    <minversion>0.2.2</minversion>
    <maxtestedon>1.3.2</maxtestedon>
    <hooks>
        <hook id="vt_row_pre_post_contacts_merge">
            <![CDATA[
                $html_user = str_replace(array('&lt;','&gt;','&quot;'), array('<','>','"'), forum_htmlencode($cur_post['html_user']));
                $forum_page['author_info']['html_user'] = $html_user;
            ]]>
        </hook>
        <hook id="vt_qr_get_posts">
            <![CDATA[
                $query['SELECT'] .= ', u.html_user';
            ]]>
        </hook>
        <hook id="pf_security_qr_registration_ip">
        <![CDATA[
            $query['SELECT'] .= ', u.html_user';
        ]]>
        </hook>
        <hook id="pf_change_details_settings_pre_email_fieldset_end">
            <![CDATA[
                if ($forum_user['is_admmod']){
                ?><fieldset class="mf-set set<?php echo ++$forum_page['item_count'] ?>">
                <legend><span>HTML</span></legend>
                <div class="mf-box">
                    <div class="txt-box textarea">
                    <div class="sig-demo"><?php $html_user = str_replace(array('&lt;','&gt;','&quot;'), array('<','>','"'), forum_htmlencode($user['html_user']));
                        echo $forum_page['author_info']['html_user'] = $html_user; ?></div></div>
                    </div>
                    <div class="mf-box">
                    <div class="txt-box textarea">
                    <div class="txt-input"><span class="fld-input"><textarea id="fld<?php echo $forum_page['fld_count'] ?>" class="inputbox" name="form[html_user]" rows="28" cols="100">
                    <?echo $forum_page['html_user'] = forum_htmlencode($user['html_user']); ?></textarea></span>
                </div>
            </div>
        </div>
</fieldset><?php } ?>
            ]]>
        </hook>
    </hooks>
</extension>

14

Ответ: Медали, отличие, и т.п.

С этим я разобрался.

Теперь вот не знаю, как через хук добавить в строку

            $form = extract_elements(array('dst', 'timezone', 'language', 'email_setting', 'notify_with_post', 'auto_notify', 'time_format', 'date_format', 'disp_topics', 'disp_posts', 'show_smilies', 'show_img', 'show_img_sig', 'show_avatars', 'show_sig', 'show_bb_panel', 'style', 'pm_long_subject', 'pm_get_mail', 'rep_enable', 'security_ip'));

, 'html_user'

15

Ответ: Медали, отличие, и т.п.

Предельно просто smile

$form['html_user] = forum_trim($_POST['html_user']);

Отредактировал Flazy (2009-04-16 17:15:44)

Вы стали счастливие?

16

Ответ: Медали, отличие, и т.п.

Flazy написал:

В зависимости от ситуации

не, он идет через функцию

    function extract_elements($allowed_elements)
    {
        $form = array();

        foreach ($_POST['form'] as $key => $value)
        {
            if (in_array($key, $allowed_elements))
                $form[$key] = $value;
        }

        return $form;
    }

вот в $allowed_elements он вставляет этот массив. Нужно чтобы к этому массиву добавилась , 'html_user'

17

Ответ: Медали, отличие, и т.п.

это все в profile.php

18

Ответ: Медали, отличие, и т.п.

if ($forum_user['g_id'] == FORUM_ADMIN)
            $form['html_user'] = intval($_POST['html_user']);

Не?

Вы стали счастливие?

19

Ответ: Медали, отличие, и т.п.

Что-то близко. Терь он результат выдает 0.
и когда нажимаю обновить профиль, выдает:
Notice: Undefined index: html_user in L:\home\flazy\www\profile.php on line 1051

20

Ответ: Медали, отличие, и т.п.

Смысл этого html_user в том, чтобы он черпал данные из этой ячейки через запрос.
Таблицу кстати переименовал из medal в html_user в бд user. Поэтому html_user а не medal.

Отредактировал De-Luxis (2009-04-16 17:53:20)

21

Ответ: Медали, отличие, и т.п.

if (isset($_POST['html_user']) && $forum_user['g_id'] == $forum_user['is_admmod'])
            $form['html_user'] = intval($_POST['html_user']);

Должно быть так.

Вы стали счастливие?

22

Ответ: Медали, отличие, и т.п.

Flazy написал:

Должно быть так.

Да, теперь работает. Но не сохраняет изменения.

23

Ответ: Медали, отличие, и т.п.

Ммм с intval это я погорячился smile forum_trim надо

Вы стали счастливие?

24

Ответ: Медали, отличие, и т.п.

Flazy написал:

forum_trim надо

неа  nea  не идет

25

Ответ: Медали, отличие, и т.п.

Тогда попробовать вытаскивать данные вот так $_POST['form']['html_user'];

Вы стали счастливие?