• User Attivo

    Popup smiles

    Pensiamo un attimo alle tagboard o shoutbox disponibili per phpbb3. Ne conoscete qualcuna che consenta d'inserire le emoticon installate sul forum ?
    Beh, io no ! L'unica che lo faceva era l' Ajax Shoutbox di Paul, un progetto abbandonato da diversi mesi.
    Add-ons sul genere sono l'Ajax Chat/Shoutbox di Handyman e la Tagboard (no ajax shoutbox) di un ragazzo italiano con un nick difficile da ricordare.
    La prima non prevede alcuna smile mentre la seconda ricorre a un escamotage nel template con una funzione js che inserisce le smiles di default.

    Ho sviluppato questa modifica per utilizzare le smiles che abbiamo installato sulla nostra board.

    Abbiamo bisogno di due nuovi files, chat_smilies.php che andremo a collocare nella root del forum, e chat_smilies.html che caricheremo nella cartella del template.

    Codice chat_smilies.php :

    [php]<?php
    define('IN_PHPBB', true);
    $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
    $phpEx = substr(strrchr(FILE, '.'), 1);
    include($phpbb_root_path . 'common.' . $phpEx);
    include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
    // Start session management
    $user->session_begin();
    $auth->acl($user->data);
    $user->setup();
    // Get and set some variables
    $mode = request_var('mode', '');
    $session_id = request_var('s', '');
    $user_id = request_var('u', ANONYMOUS);
    $template_html = 'chat_smilies.html';
    $sql = 'SELECT * FROM ' . SMILIES_TABLE . '
    WHERE display_on_posting = 1
    ORDER by smiley_order';
    $result = $db->sql_query($sql);
    $i = "0";
    while($row = $db->sql_fetchrow($result)){
    $emoticon = $row['smiley_url'];
    $code = addslashes($row['code']);
    $template->assign_block_vars('smilies',array(
    'SMILE_IMG' => $phpbb_root_path . $config['smilies_path'] . '/' .$emoticon,
    'CODE' => $code
    ));
    $i++;
    }
    //titolo pagina
    page_header($page_title);
    $template->set_filenames(array(
    'body' => $template_html)
    );
    make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
    page_footer();
    ?>[/php]

    Codice chat_smilies.html

    <!-- INCLUDE simple_header.html -->
    <script language="javascript" type="text/javascript">
    <!--
    function AddSmile(smile){
    smile =  ' ' + smile + ' ';
    opener.text.message.value=opener.text.message.value
    + smile;
    if(document.my.ifClose.checked == true){
      opener.document.text.message.focus();
            window.close();
         }
    }
    //-->
    </script>
    <div class="panel">
     <div class="inner"><span class="corners-top"><span></span></span>
     <form name="my"><br>
         <input type="checkbox" checked="checked" name="ifClose">
            {L_CLOSE_SMILIES}
        </form>
    <span class="corners-bottom"><span></span></span></div>
      </div>
    <div class="panel bg2">
     <div class="inner"><span class="corners-top"><span></span></span>
     <div class="inner"><span class="corners-top"><span></span></span>
         <!-- BEGIN smilies -->
           <a href="javascript:AddSmile('{smilies.CODE}')"><img src="{smilies.SMILE_IMG}" /></a>
            <!-- END smilies -->
    <span class="corners-bottom"><span></span></span></div>
      </div>
     
    <!-- INCLUDE simple_footer.html -->
    

    Nello script che utlizza la funzione opener dobbiamo andare a cambiare i nomi del form e del campo (textarea o input) dove saranno inserite le smilies.
    Nel mio caso io ho un form strutturato così :

    <form name="text" id="text" method="post" action="javascript:void(0);" onsubmit="handle_send('add', this)" autocomplete="off">
          <strong style="color: white;">{L_MESSAGE}:</strong> <input type="text" tabindex="1" name="message" id="message" class="inputbox chatinput" />
          <input type="submit" class="button1" value="{L_SUBMIT}" name="submit" tabindex="6" accesskey="s"/><br />
         </form>
    

    Quindi i miei oggetti sono text e message, opener.text.message .

    Apriamo il file includes/function.php e istruiamo lo script affinchè attribuisca una chiave al template circa la nostra nuova pagina.

    Cerchiamo :

    [php] 'U_RESTORE_PERMISSIONS' => ($user->data['user_perm_from'] && $auth->acl_get('a_switchperm')) ? append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=restore_perm') : '',
    [/php]

    e aggiungiamo subito dopo :

    [php]'U_CHAT_SMIL' => append_sid("{$phpbb_root_path}chat_smilies.$phpEx"),
    [/php]

    Apriamo il file language/it/common.php e cerchiamo :

    [php] 'CHANGING_PROFILE' => 'Modifica impostazioni profilo',
    [/php]

    Aggiungiamo subito dopo :

    [php]
    'CLOSE_SMILIES' => 'Chiudi la finestra dopo l'inserimento',
    'SHOUT_SMILIES' => 'Smilies',
    [/php]

    Adesso dobbiamo inserire il collegamento al popup nel template, chiaramente vicino al form (in questo caso la shoutbox)

    
     <script type="text/javascript">
     <!--
    function popitup(url) {
     newwindow=window.open(url,'name','height=250,width=350,scrollbars=yes');
     if (window.focus) {newwindow.focus()}
     return false;
    }
     -->
     </script>
    <a href="{U_CHAT_SMIL}" onclick="return popitup('{U_CHAT_SMIL}')"
     >{L_SHOUT_SMILIES}</a>
    

    Aggiorniamo il template, puliamo la cache e divertiamoci con le faccine !:eheh: