Téma nyitó hozzászólás kiemelése

2013.12.07. 13:50

A topikok témáiban az első hozzászólás kiemelése, jól látható elkülönítése.

Ez a téma valószínű sokakat érdekel, mert a fórumon számos helyen jól jönne ez a megoldás. Főleg olyan oldalakon, ahol pörög a fórum, sok a hozzászólás egy-egy témában, így a hozzászólások már esetleg több oldalon jelennek meg. Néha ilyenkor már egy idő után elsikkad az eredeti témaindító hozzászólás, és az egész topik kezd teljesen másról szólni.
A módosítás hatása, hogy a felhasználó bármilyen megjelenítési sorrend beállítása ellenére a téma első hozzászólása kiemelés esetén mindig legfelül jelenik meg, ráadásul több oldal esetén minden oldal tetején megjelenik.
Még a phpBB2-höz készült anno egy megoldás, amit aztán tovább fejlesztettek, és 2007 környékén készült egy MOD first_post_on_every_page_phpbb3 néven a phpbb3-hoz, ami aztán nem igazán vált be, mivel ez a MOD csak a topikot indexelte és nem a hozzászólást.
Ezután egy post-ban kikerült egy kiegészítés, történt közben még pár javító megoldás hozzá, így aztán már teljesen használhatóvá vált, bár komplex MOD még mindig nem került ki róla.

Ez a leírás már teljes körű, 3.0.12 alatt is hibamentesen fut, és telepítést nem igényel.

Legelőször is biztonságból készítsünk egy teljes adatbázis mentést:
    AVP - Karbantartás fül, majd bal oldalt válasszuk ki az Adatbázis - Kimentés menüpontot. A bejövő ablakban célszerű mindhárom opciót az első lehetőségre állítani, klikkeljünk rá a lista-box alatt lévő Összes kiválasztása opcióra, majd klikk az Elküld gombra.

Lépjünk be a phpMyAdmin felületre, válasszuk ki az adatbázisunkat, majd klikkeljünk az SQL menüpontra.
Írjuk be a következő utasítást, majd küldjük el (ha nem a "phpbb_" perfixet használjuk, ezt írjuk át az általunk használtra):
Kód:
ALTER TABLE phpbb_topics ADD topic_first_post_show TINYINT(1) UNSIGNED DEFAULT '0' NOT NULL;

Ezután klikkeljünk újra az SQL menüpontra, majd írjunk be még egy utasítást, és ezt is küldjük el (ha nem a "phpbb_" perfixet használjuk, ezt írjuk át az általunk használtra):
Kód:
ALTER TABLE phpbb_posts ADD enable_detachment TINYINT(1) DEFAULT 0;

Lépjünk ki a phpMyAdmin felületről, és kezdjük a fájlok szerkesztését:

Állomány megnyitása: posting.php
Keresés
Kód:
$post_data['poll_options']      = array();

Beillesztés mögé
Kód:
$post_data['topic_first_post_show'] = (isset($post_data['topic_first_post_show'])) ? $post_data['topic_first_post_show'] : 0;

Keresés
Kód:
   $poll_delete      = (isset($_POST['poll_delete'])) ? true : false;

Beillesztés mögé
Kód:
   $topic_first_post_show = (isset($_POST['topic_first_post_show'])) ? true : false;

Keresés
Kód:
         if ($config['enable_post_confirm'] && !$user->data['is_registered'] && (isset($captcha) && $captcha->is_solved() === true) && ($mode == 'post' || $mode == 'reply' || $mode == 'quote'))
         {
            $captcha->reset();
         }

Beillesztés mögé
Kód:
         // Show/Unshow first post on every page
                if(($mode == 'edit' && $post_id == $post_data['topic_first_post_id']) || $mode == 'post')
                {
                    if($mode == 'post')
                    {
                        $topic_id = $data['topic_id'];
                    }

                    $perm_show_unshow = ($auth->acl_get('m_lock', $forum_id) || ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && !empty($post_data['topic_poster']) && $user->data['user_id'] == $post_data['topic_poster'])) ? true : false;

                    if($post_data['topic_first_post_show'] != $topic_first_post_show && $perm_show_unshow)
                    {
                        $sql = 'UPDATE ' . TOPICS_TABLE . '
                            SET topic_first_post_show = ' . (($topic_first_post_show) ? 1 : 0) . "
                            WHERE topic_id = $topic_id";
                        $db->sql_query($sql);

                    if(!$post_id)
                     {
                        $sql = 'SELECT post_id
                            FROM '. POSTS_TABLE ."
                            WHERE topic_id = $topic_id";
                        $result  = $db->sql_query($sql);
                        $post_id = $db->sql_fetchfield('post_id');
                        $db->sql_freeresult($result);
                     }

                        $sql = 'UPDATE ' . POSTS_TABLE . '
                            SET enable_detachment = ' . (($topic_first_post_show) ? 1 : 0) . "
                            WHERE post_id = $post_id";
                        $db->sql_query($sql);
                    }
                }

Keresés
Kód:
$s_topic_icons = false;

Beillesztés elé
Kód:
// Do show show first post on every page checkbox only in first post
$first_post_show_allowed = false;
if(($mode == 'edit' && $post_id == $post_data['topic_first_post_id']) || $mode == 'post')
{
   $first_post_show_allowed = true;
}

Keresés
Kód:
$lock_post_checked   = (isset($post_lock)) ? $post_lock : $post_data['post_edit_locked'];

Beillesztés mögé
Kód:
$first_post_show_checked = (isset($post_data['topic_first_post_show'])) ? $post_data['topic_first_post_show'] : 0;

Keresés
Kód:
   'S_FORM_ENCTYPE'         => $form_enctype,

Beillesztés mögé
Kód:
   'S_FIRST_POST_SHOW_ALLOWED'      => ($first_post_show_allowed  && ($auth->acl_get('m_lock', $forum_id) || ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && !empty($post_data['topic_poster']) && $user->data['user_id'] == $post_data['topic_poster']))) ? true : false,
   'S_FIRST_POST_SHOW_CHECKED'      => ($first_post_show_checked) ? ' checked="checked"' : '',


Állomány megnyitása: viewtopic.php
Keresés
Kód:
$i = ($store_reverse) ? $sql_limit - 1 : 0;

Beillesztés mögé
Kód:
// First post on every page
// Show first post on every page if needed
if($topic_data['topic_first_post_show'])
{
   $i = 0;
   $post_list[$i] = $topic_data['topic_first_post_id'] ;
   $i = ($store_reverse) ? $sql_limit : $i+1;
}

Keresés
Kód:
   'foe'                => $row['foe'],

Beillesztés mögé
Kód:
    'enable_detachment' => $row['enable_detachment'],

Keresés
Kód:
    'S_TOPIC_POSTER'    => ($topic_data['topic_poster'] == $poster_id) ? true : false,

Beillesztés mögé
Kód:
    'S_ENABLE_DETACHMENT'  => $row['enable_detachment'], 


Állomány megnyitása: language/en/common.php
Keresés
Kód:
   'FIND_USERNAME'         => 'Find a member',

Beillesztés mögé
Kód:
   'FIRST_POST_SHOW'      => 'Show on top of every page',


Állomány megnyitása: language/hu/common.php
Keresés
Kód:
   'FIND_USERNAME'         => 'Felhasználó keresése',

Beillesztés mögé
Kód:
   'FIRST_POST_SHOW'      => 'Mutasd minden oldal tetejére',


Állomány megnyitása: styles/prosilver/template/posting_editor.html
Keresés
Kód:
         <!-- IF S_LOCK_POST_ALLOWED -->
            <div><label for="lock_post"><input type="checkbox" name="lock_post" id="lock_post"{S_LOCK_POST_CHECKED} /> {L_LOCK_POST} [{L_LOCK_POST_EXPLAIN}]</label></div>
         <!-- ENDIF -->

Ha a szerző kiemelheti az első hozzászólást
    Beillesztés mögé
    Kód:
             <!-- IF S_FIRST_POST_SHOW_ALLOWED -->
                <div><label for="topic_first_post_show"><input type="checkbox" name="topic_first_post_show" id="topic_first_post_show"{S_FIRST_POST_SHOW_CHECKED} /> {L_FIRST_POST_SHOW} </label></div>
             <!-- ENDIF -->
Ha Moderátori engedély kell a kiemeléshez
    Beillesztés mögé
    Kód:
             <!-- IF S_FIRST_POST_SHOW_ALLOWED -->
             <!-- IF U_MCP or U_ACP -->
                <div><label for="topic_first_post_show"><input type="checkbox" name="topic_first_post_show" id="topic_first_post_show"{S_FIRST_POST_SHOW_CHECKED} /> {L_FIRST_POST_SHOW} </label></div>
             <!-- ENDIF -->   
             <!-- ENDIF -->


Állomány megnyitása: styles/prosilver/template/viewtopic_body.html
Keresés
Kód:
    <!-- END postrow -->

Beillesztés elé
Kód:
    <!-- IF postrow.S_ENABLE_DETACHMENT --><br /> IDE BE LEHET TENNI SZÖVEGET, KÉPET, REKLÁMOT, VAGY MÉG TÖBB (<br />) SOREMELÉST <br /><!-- ENDIF -->


Állomány megnyitása: styles/subsilver2/template/posting_body.html
Keresés
Kód:
         <!-- IF S_LOCK_POST_ALLOWED -->
            <tr>
               <td><input type="checkbox" class="radio" name="lock_post"{S_LOCK_POST_CHECKED} /></td>
               <td class="gen">{L_LOCK_POST} [{L_LOCK_POST_EXPLAIN}]</td>
            </tr>
         <!-- ENDIF -->

Ha a szerző kiemelheti az első hozzászólást
    Beillesztés mögé
    Kód:
             <!-- IF S_FIRST_POST_SHOW_ALLOWED -->
                <tr>
                   <td><input type="checkbox" class="radio" name="topic_first_post_show"{S_FIRST_POST_SHOW_CHECKED} /></td>
                   <td class="gen">{L_FIRST_POST_SHOW}</td>
                </tr>
             <!-- ENDIF -->
Ha Moderátori engedély kell a kiemeléshez
    Beillesztés mögé
    Kód:
             <!-- IF S_FIRST_POST_SHOW_ALLOWED -->
             <!-- IF U_MCP or U_ACP -->         
                <tr>
                   <td><input type="checkbox" class="radio" name="topic_first_post_show"{S_FIRST_POST_SHOW_CHECKED} /></td>
                   <td class="gen">{L_FIRST_POST_SHOW}</td>
                </tr>
             <!-- ENDIF -->
             <!-- ENDIF -->


Állomány megnyitása: styles/subsilver2/template/viewtopic_body.html
Keresés
Kód:
    <!-- END postrow -->

Beillesztés elé
Kód:
    <!-- IF postrow.S_ENABLE_DETACHMENT --><br /> IDE BE LEHET TENNI SZÖVEGET, KÉPET, REKLÁMOT, VAGY MÉG TÖBB (<br />) SOREMELÉST <br /><!-- ENDIF -->


A szerkesztett fájlokat töltsük fel az oldalunkon a helyére, felül írva az ott lévőket.
Ezután az AVP-ben Általános fül - középen Gyorsítótár kiürítése - Futtatás most - Igen
Telepítő fájl futtatását nem igényli, így ezzel vége a "MOD" aktiválásának.

A lehetőség csak a témanyitó hozzászólás írásánál, vagy annak szerkesztésénél jelenik meg alul ("Mutasd minden oldal tetejére"), attól függően, hogy a posting_editor.html fájlban melyik variációt helyeztük el:
  • Ha a szerző kiemelheti az első hozzászólást --- bárki kiemelheti a saját első témanyitó hozzászólását, aki ott új témát nyithat.
  • Ha Moderátori engedély kell a kiemeléshez --- A felhasználó egy Moderátortól (vagy Admintól) kérheti a témában az általa írt témanyitó hozzászólás kiemelését.

A fórum többi témáitól függetlenül a témanyitó hozzászólás csak abban a témában lesz kiemelve, amelyikben kiemeltté tettük.
A témanyitó hozzászólásoknál később is bármikor vissza lehet vonni a kiemelést, ha szerkesztjük, a pipát kivesszük, majd így küldjük el.
A témanyitó hozzászólásokat később is bármikor ki lehet emelni, ha szerkesztjük, a pipát a megfelelő helyre berakjuk, majd így küldjük el.