To jest tylko wersja do druku, aby zobaczyć pełną wersję tematu, kliknij TUTAJ
phpBB2 by Przemo
Support forów phpBB2 modified by Przemo

Problem z modyfikacją - [MOD] New Topic Notify

Qp3k - 10-08-2007, 11:44
Temat postu: [MOD] New Topic Notify
NTN polega na mailowym informowaniu forumowiczow o kazdym nowym temacie. Pod warunkiem oczywiscie, ze beda tego chcieli. Nie wiem czy ktos juz takiej modyfikacji nie zrobil. Szukalem, ale nie znalazlem. Kilka osob pytalo o tego moda, wiec pomyslalem, ze sie podziele.
Moim zdaniem to glupi pomysl, ale Klient sie uparl... Modyfikacja opiera sie na istniejacej juz funkcji user_notification sluzacej informowaniu o nowych odpowiedziach. Wyglada nastepujaco:


Krok #1 - utworz nowe dodatkowe pole w profilu
PA » Uzytkownicy » Pola w profilu » Dodaj

Nazwa: Informuj mnie o nowych tematach
Dlugi opis pola: Zdecyduj czy chcesz otrzymywać informacje o nowych tematach
Generowanie jumboxa: tak,nie

Reszta ustawien wedle uznania.

Krok #2 - sprawdz jaka nazwe w bazie danych nosi to nowiutkie pole
Przykladowa nazwa: user_field_1

1) przez phpMyAdmin (tabela users)
2) przez wartosc parametru id_form w adresie formularza modyfikacji / podgladu dodatkowego pola (user_field_[id_form])

Krok #3 - zmodyfikuj plik /includes/functions_post.php

Zmien fragment kodu rozpoczynajacego sie w linii #705:

Kod:
if ( $mode == 'reply' )
{
    $sql = "SELECT ban_userid
        FROM " . BANLIST_TABLE;
    if ( !($result = $db->sql_query($sql)) )
    {
        message_die(GENERAL_ERROR, 'Could not obtain banlist', '', __LINE__, __FILE__, $sql);
    }
        $user_id_sql = '';
    while ( $row = $db->sql_fetchrow($result) )
    {
        if ( isset($row['ban_userid']) && !empty($row['ban_userid']) )
        {
            $user_id_sql .= ', ' . $row['ban_userid'];
        }
    }
        $sql = "SELECT u.user_id, u.username, u.user_email, u.user_lang, u.user_aim, u.user_notify_gg, t.topic_title
        FROM (" . TOPICS_WATCH_TABLE . " tw, " . USERS_TABLE . " u, " . TOPICS_TABLE . " t)
        WHERE tw.topic_id = $topic_id
            AND t.topic_id = $topic_id
            AND tw.user_id NOT IN (" . $userdata['user_id'] . ", " . ANONYMOUS . $user_id_sql . " )
            AND tw.notify_status = " . TOPIC_WATCH_UN_NOTIFIED . "
            AND u.user_id = tw.user_id";

na:
(w ponizszym kodzie u.user_field_1 zamien na nazwe odnaleziona w poprzednim kroku :!: )
Kod:
if ( $mode == 'reply' || $mode == 'newtopic' )
{
    $sql = "SELECT ban_userid
        FROM " . BANLIST_TABLE;
    if ( !($result = $db->sql_query($sql)) )
    {
        message_die(GENERAL_ERROR, 'Could not obtain banlist', '', __LINE__, __FILE__, $sql);
    }

    $user_id_sql = '';
    while ( $row = $db->sql_fetchrow($result) )
    {
        if ( isset($row['ban_userid']) && !empty($row['ban_userid']) )
        {
            $user_id_sql .= ', ' . $row['ban_userid'];
        }
    }
}

if ( $mode == 'reply' )
{
    $sql = "SELECT u.user_id, u.username, u.user_email, u.user_lang, u.user_aim, u.user_notify_gg, t.topic_title
        FROM (" . TOPICS_WATCH_TABLE . " tw, " . USERS_TABLE . " u, " . TOPICS_TABLE . " t)
        WHERE tw.topic_id = $topic_id
            AND t.topic_id = $topic_id
            AND tw.user_id NOT IN (" . $userdata['user_id'] . ", " . ANONYMOUS . $user_id_sql . " )
            AND tw.notify_status = " . TOPIC_WATCH_UN_NOTIFIED . "
            AND u.user_id = tw.user_id";
}
elseif ( $mode == 'newtopic' )
{
    $sql = "SELECT u.user_id, u.username, u.user_email, u.user_lang, u.user_field_1, u.user_aim, u.user_notify_gg, t.topic_title
        FROM (" . USERS_TABLE . " u, " . TOPICS_TABLE . " t)
        WHERE u.user_field_1 = 'tak'
            AND t.topic_id = $topic_id
            AND u.user_id NOT IN (" . $userdata['user_id'] . ", " . ANONYMOUS . $user_id_sql . " )";
}
       
if ( $mode == 'reply' || $mode == 'newtopic' )
{


Zamien rowniez fragment:

Kod:
$emailer->use_template('topic_notify', $user_lang);

na:
Kod:
if ( $mode == 'reply' ) $emailer->use_template('topic_notify', $user_lang);
elseif ( $mode == 'newtopic' ) $emailer->use_template('new_topic_notify', $user_lang);


Krok #4 - utworz pliki jezykowe
/language/lang_polish/email/new_topic_notify.tpl

Tresc tego pliku:

Cytat:
Subject: Powiadomienie o nowym temacie
Charset: iso-8859-2
Witaj,

Na forum {SITENAME} pojawił się nowy temat napisany przez {NOTIFICATION_USERNAME} - "{TOPIC_TITLE}".
Możesz skorzystać z poniższego odnośnika aby go zobaczyć. Jeśli nie chcesz byśmy informowali Cię o nowych tematach, wyłącz opcję "Informuj mnie o nowych tematach".
{U_TOPIC}

{EMAIL_SIG}

Jesli chcesz utworz analogicznie plik dla innej wersji jezykowej.

---
No i wszystko - powinno hulac :)
Zalaczam zmodyfikowane pliki.

m@rcin... - 10-08-2007, 13:14

Qp3k napisał/a:
Krok #2 - sprawdz jaka nazwe w bazie danych nosi to nowiutkie pole
Przykladowa nazwa: user_field_1

1) przez phpMyAdmin (tabela users)
2) przez wartosc parametru id_form w linku prowadzacym do formularza modyfikacji / podgladu dodatkowego pola (user_field_[id_form])

Nie rozumiem jak to zrobić :/

Dlugi - 10-08-2007, 13:27

tylko czy poczta nie uzna maili od forum za spam jak beda na duzym forum co kilka minut wysylac mase maili ?
Qp3k - 10-08-2007, 13:46

m@rcin... napisał/a:
Qp3k napisał/a:
Krok #2 - sprawdz jaka nazwe w bazie danych nosi to nowiutkie pole
Przykladowa nazwa: user_field_1

1) przez phpMyAdmin (tabela users)
2) przez wartosc parametru id_form w linku prowadzacym do formularza modyfikacji / podgladu dodatkowego pola (user_field_[id_form])

Nie rozumiem jak to zrobić :/


W takim razie najprostszym dla Ciebie sposobem bedzie 2)
Po dodaniu tego pola wroc do ustawien dodatkowych pol i wyswietl sobie zrodlo ramki strony z ich lista.
Sprawdz wartosc parametru ACTION formularza, ktory sluzy Edycji / Podgladowi nowego pola.
U mnie wyglada on tak:
Kod:
<form method="post" action="admin_custom_fields.php?mode=edit&amp;id_form=1&amp;sid=xxx">

Adres ten zawiera parametr ID_FORM. Wartosc tego parametru (w tym przypadku cyfra 1) zdradza nazwe dodatkowego pola w bazie. Umieszczasz te cyfre na koncu ciagu "user_field_" otrzymujac "user_field_1". Jesli masz wiecej dodatkowych pol, to mozesz miec np. user_field_2, albo user_field_3 itd... Jasniej juz nie potrafie :)

Dlugi napisał/a:
tylko czy poczta nie uzna maili od forum za spam jak beda na duzym forum co kilka minut wysylac mase maili ?

Przede wszystkim odradzam wprowadzanie tego moda na duzych forach, gdzie czesto pojawiaja sie nowe tematy. Idealnie nadaje sie wlasnie dla malych, rzadko odwiedzanych forow.
Co do uznawania maili z forum za spam, to nalezaloby sie raczej przyjrzec funkcji, ktora wykorzystywana jest w phpbb by przemo do masowej wysylki maili. To modyfikacja nie ma z tym nic wspolnego i korzysta z gotowych rozwiazan phpbb Przema.



Powered by phpBB modified by Przemo © 2003 phpBB Group