[DEV] View Last Pictures 2

Questa discussione si intitola [DEV] View Last Pictures 2 nella sezione MODs in sviluppo. Nome MOD: View Last Pictures 2. Descrizione MOD:Visualizza nell'indice un modulo tipo Forum con le 5-6 immagini in formato miniatura degli allegati agli ultimi Topics. ...

[DEV] View Last Pictures 2

Messaggioda Micogian » 21/02/2010, 16:29

Nome MOD: View Last Pictures 2.

Descrizione MOD:Visualizza nell'indice un modulo tipo Forum con le 5-6 immagini in formato miniatura degli allegati agli ultimi Topics.
Le immagini sono link alle rispettive discussioni e il title corrisponde al Titolo del Topic, al Forum e all'Autore del Topic, informazioni visibili al passaggio del mouse.

Demo: http://www.actaplantarum.org/floraitaliae/index.php e http://www.actafungorum.org/actaforum/index.php

Cronologia:
  • 8/01/2010 - Pubblicata la prima versione della MOD in phpbb.it "Mod in sviluppo"
  • 20/01/2010 - Iniziata una versione 2 con modifiche relative al modo di visualizzazione delle thumbs
  • 21/02/2010 - Pubblicata la versione 2(vedi Modifiche)

Modifiche rispetto alla prima versione
La prima versione prevedeva il caricamento delle immagini originali che venivano ridotte al momento per essere visualizzate a una dimensone fissa di 123-150 pixel in altezza.
Questa operazione avveniva naturalmente ad ogni apertura della pagina, a volte con evidenti rallentamenti.
La versione 2 funziona in questo modo: le immagini vengono salvate già in dimensioni miniatura in una cartella "thumbs" appositamente creata nella root del Forum.
L'immagine thumb viene creata al momento dell'apertura della pagina ma solo se non è presente nella cartella. La procedura prevista dalla query provvede a "estrarre" gli ultimi allegati sotto forma di attach_id.
Il file thumb viene archiviato con il nome attach_id.jpg e pertanto se il file esiste la procedura lo visualizza, se non esiste lo copia e quindi lo visualizza.
In sostanza la copia avviene solamente per i nuovi allegati e una volta sola, alla prima occasione.
I successivi utenti che apriranno l'indice troveranno già presente l'immagine e quindi l'apertura della pagina non subirà grossi rallentamenti.
IMPORTANTE: vista la presenza nella Mod di una funzione che copia i file allegati è necessario che gli allegati stessi abbiano i permessi di lettura e che siano attivate nel Server le funzioni php di copia.

Autore: Bingo
Versioni phpBB compatibili: 3.0.x

Cartelle da creare: Via FTP creare la cartella "thumbs" nella root del forum.

File da modificare-creare:

1) modificare index.php
2) creare file styles/.../template/mod_lastpic.html
3) modificare styles/.../template/index_body.html

1) Apri: index.php

Trova:
Codice: Seleziona tutto
page_header($user->lang['INDEX']);

Aggiungi: prima

Codice: Seleziona tutto
// #######   INIZIO MOD VIEW LAST PICTURES   ##########
// function che copia l'allegato in formato thumb
function resize_thumbs($physical,$attach_id){
    $img_des = $phpbb_root_path . "thumbs/" . $attach_id . ".jpg" ;
    // Ottengo le informazioni sull'immagine originale
    list($width, $height, $type, $attr) = getimagesize($phpbb_root_path . "files/" . $physical);

    // Creo la versione ridimensionata dell'immagine (thumbnail)
    $new_height = '120' ;
    $new_width = ($width * $new_height / $height);
    $thumb = imagecreatetruecolor($new_width, $new_height);
    $source = imagecreatefromjpeg($phpbb_root_path . "files/" . $physical);
    imagecopyresized($thumb, $source, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

    // Salvo l'immagine ridimensionata
    imagejpeg($thumb, $img_des, 75);
   return "thumbs/". $attach_id . ".jpg" ;
}

$forum_attach_id = 1;  // ATTENZIONE inserire il forum_id (padre) dal quale si vuole estrarre gli allegati

// Redirect to login upon emailed notification links
if (isset($_GET['e']) && !$user->data['is_registered'])
{
   login_box('', $user->lang['LOGIN_NOTIFY_FORUM']);
}

$sql = "SELECT f.*
   FROM ".FORUMS_TABLE." f
   WHERE f.forum_id = " . (isset($forum_attach_id) ? $forum_attach_id : 0);
$result = $db->sql_query($sql);
$forum_attach_data = $db->sql_fetchrow($result);
$db->sql_freeresult($result);

// Check if forum exist
if (!$forum_attach_data)
{
   trigger_error('NO_FORUM');
}

// Check if user have permissions
if (!$auth->acl_gets('f_list', 'f_read', $forum_attach_id) || ($forum_attach_data['forum_type'] == FORUM_LINK && $forum_attach_data['forum_link'] && !$auth->acl_get('f_read', $forum_attach_id)))
{
   if ($user->data['user_id'] != ANONYMOUS)
   {
      trigger_error('SORRY_AUTH_READ');
   }

   login_box('', $user->lang['LOGIN_VIEWFORUM']);
}

// Check if forum is passworded
if ($forum_attach_data['forum_password'])
{
   login_forum_box($forum_attach_data);
}

//query per estrarre gli ultimi 5 Topics con allegati
$sql = "SELECT
pt.topic_id, pt.forum_id, pt.topic_title, pt.topic_first_poster_name, pt.topic_attachment, pf.forum_name, pf.parent_id, pf.forum_id, pt.topic_time
FROM ". TOPICS_TABLE." pt,". FORUMS_TABLE. " pf
WHERE pf.parent_id = $forum_attach_id
AND pt.forum_id = pf.forum_id
AND pt.topic_attachment = 1
ORDER BY pt.topic_time DESC LIMIT 6";

$db->sql_query($sql);

$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
   $topic_id = $row['topic_id'];
   // ricerca il primo attach_id dei topics selezionati
   $sql_pic = "SELECT pa.attach_id, pa.topic_id, pa.physical_filename, pa.extension
      FROM ". ATTACHMENTS_TABLE." pa
      WHERE pa.topic_id = $topic_id
   AND pa.extension = 'jpg'
      ORDER BY pa.attach_id LIMIT 1" ;
      $db->sql_query($sql_pic);
      $result1 = $db->sql_query($sql_pic);
      $row1 = $db->sql_fetchrow($result1);
      $attach_id = $row1['attach_id'];
   $physical = $row1['physical_filename'];
   $thumbs = "thumbs/". $attach_id . ".jpg" ;
   if (is_file($thumbs)){
   $thumb_cor = $thumbs ;  // se il file thumb esiste visualizza questo
   }else{
   $thumb_cor = resize_thumbs($physical, $attach_id);   // altrimenti lo crea
   }

// assegna le variabili da passare al file HTML
$template->assign_block_vars('attach_list', array(
      'MY_TOPIC_ID'        => $row['topic_id'],
      'MY_FORUM_ID'        => $row['forum_id'],
      'MY_TOPIC_TITLE'     => $row['topic_title'],
      'MY_TOPIC_LINK'      => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 't='.$row['topic_id']),
      'MY_ATTACH_LINK'     => append_sid("{$phpbb_root_path}download/file.$phpEx", 'id='.$attach_id),
      'MY_FORUM_NAME'      => $row['forum_name'],
      'MY_TOPIC_AUTHOR'    => $row['topic_first_poster_name'],
      'MY_ATTACH_ID'       => $attach_id,
      'MY_THUMBS'          => $thumb_cor
      ));
}

//$db->sql_freeresult($result);
// #######   FINE MOD VIEW LAST PICTURES   ##########



2a) Apri: creare file styles/.../template/mod_lastpic.html (stile prosilver)

Codice: Seleziona tutto
<div class="forabg">
   <div class="inner"><span class="corners-top"><span></span></span>
   <ul class="topiclist">
      <li class="header">
         <dl class="icon">
         <dt>Ultime immagini del Forum</dt>
         </dl>      
      </li>
   </ul>
   <ul class="topiclist forums">
      <li class="row">
         <div align="center">
         <!-- BEGIN attach_list -->
         <a href="{attach_list.MY_TOPIC_LINK}" title="{attach_list.MY_TOPIC_TITLE} (di {attach_list.MY_TOPIC_AUTHOR})"><img src="{attach_list.MY_ATTACH_LINK}" alt="{attach_list.MY_FORUM_NAME}" border="0" height="100"></a>
         <!-- END attach_list-->
         </div>
      </li>
   </ul>
   <span class="corners-bottom"><span></span></span></div>
</div>


2b) Apri: creare file styles/.../template/mod_lastpic.html (stile subsilver2)

Codice: Seleziona tutto
<table class="tablebg" cellspacing="1" width="100%">

<tr>
   <th colspan="2" align="left">&nbsp;Ultime immagini del Forum&nbsp;</th>
</tr>
<tr>
   <td class="row1" colspan="3" align="center">
      <!-- BEGIN attach_list -->
         <a href="{attach_list.MY_TOPIC_LINK}" title="{attach_list.MY_TOPIC_TITLE} (di {attach_list.MY_TOPIC_AUTHOR})"><img src="{attach_list.MY_ATTACH_LINK} alt="{attach_list.MY_FORUM_NAME}" border="0" height="100"></a>
      <!-- END attach_list--></td>
</tr>
<tr>
   <td class="row2" colspan="3" align="center">&nbsp;Seconda riga</td>
</tr>
</table>


3) modificare styles/.../template/index_body.html

1) Apri: index_body.html

Trova:
Codice: Seleziona tutto
<!-- INCLUDE forumlist_body.html -->

Aggiungi: prima
Codice: Seleziona tutto
<!-- INCLUDE mod_lastpic.html -->


Note: con questo INCLUDE evitiamo di inserire modifiche al file index_body.html inserendo semplicemente il file esterno.
Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
 
Messaggi: 2490
Iscritto il: 07/01/2010, 9:51
Località: Udine
Versione: 3.0.10
MOD:
Server: UNIX/Linux
phpBB SEO: No
PHP: 5.2.9
Database: MySQL 5.0.77

  • Condividi questa discussione
  • Ti piace questa discussione?
    Condividila! :)

Re: [DEV] View Last Pictures 2

Messaggioda Haku » 22/02/2010, 6:39

Mi serviva proprio...bravo bingo!
Una domanda: posso inserire però le imagini che vengono postate in una determinata categoria?
Avatar utente
Haku
Traduttore
Traduttore
 
Messaggi: 2527
Iscritto il: 22/09/2009, 22:36
Sesso: Maschio
Versione: 3.0.9
MOD:
Server: UNIX/Linux
phpBB SEO:

Re: [DEV] View Last Pictures 2

Messaggioda Micogian » 22/02/2010, 9:16

Haku ha scritto:Mi serviva proprio...bravo bingo!
Una domanda: posso inserire però le imagini che vengono postate in una determinata categoria?

Puoi scegliere il parent_id, cioè il Forum che contiene altri subforum.
Se invece vuoi visualizzare solamente le immagini di un Forum non-parent, che non contiene altri subforum, devi modificare la query facendo la ricerca su forum_id delal tabella phpbb_topics, non su parent_id della tabella phpbb_forums
Quindi, prima metti il valore di forum_id che vuoi attivare alla variabile $forum_attach_id= ?? e poi modifichi la parte della query "WHERE pf.parent_id = $forum_attach_id" con "WHERE pt.forum_id = $forum_attach_id"
Codice: Seleziona tutto
$sql = "SELECT
pt.topic_id, pt.forum_id, pt.topic_title, pt.topic_first_poster_name, pt.topic_attachment, pf.forum_name, pf.parent_id, pf.forum_id, pt.topic_time
FROM ". TOPICS_TABLE." pt,". FORUMS_TABLE. " pf
WHERE pt.forum_id = $forum_attach_id
AND pt.forum_id = pf.forum_id
AND pt.topic_attachment = 1
ORDER BY pt.topic_time DESC LIMIT 6";

A questo punto non servirebbe la tabella phpbb_forums
Se invece vuoi visualizzare le immagini di più Categorie, se sono adiacenti (come numero ID), ad esempio 10, 11, 12, si può fare
Codice: Seleziona tutto
$sql = "SELECT
pt.topic_id, pt.forum_id, pt.topic_title, pt.topic_first_poster_name, pt.topic_attachment, pf.forum_name, pf.parent_id, pf.forum_id, pt.topic_time
FROM ". TOPICS_TABLE." pt,". FORUMS_TABLE. " pf
WHERE pt.forum_id > 9 AND pt.forum_id < 13
AND pt.forum_id = pf.forum_id
AND pt.topic_attachment = 1
ORDER BY pt.topic_time DESC LIMIT 6";


Se mi dici cosa vuoi esattamente vedo qual'è la soluzione migliore.
Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
 
Messaggi: 2490
Iscritto il: 07/01/2010, 9:51
Località: Udine
Versione: 3.0.10
MOD:
Server: UNIX/Linux
phpBB SEO: No
PHP: 5.2.9
Database: MySQL 5.0.77

Re: [DEV] View Last Pictures 2

Messaggioda Micogian » 22/02/2010, 10:57

Un'altra soluzione è la seguente
Codice: Seleziona tutto
WHERE pt.forum_id IN (10,20)

In questo modo la ricerca riguarda forum_id=10 e forum_id=20
Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
 
Messaggi: 2490
Iscritto il: 07/01/2010, 9:51
Località: Udine
Versione: 3.0.10
MOD:
Server: UNIX/Linux
phpBB SEO: No
PHP: 5.2.9
Database: MySQL 5.0.77

Re: [DEV] View Last Pictures 2

Messaggioda Sir Xiradorn » 23/02/2010, 1:56

Posso chiedere una stipidata? Ammittiamo che io voglia inserire quest mod in un documento tipo php a a parte senza intaccare il codice dell'index avendo così il tutto maggiormente pulito....sarebbe possibile farlo?
Avatar utente
Sir Xiradorn
phpBB Expert
phpBB Expert
 
Messaggi: 476
Iscritto il: 11/08/2009, 12:41
Località: Lontano....
Versione: 3.0.7-PL1
MOD:
Server: UNIX/Linux

Re: [DEV] View Last Pictures 2

Messaggioda Micogian » 23/02/2010, 8:10

Sir Xiradorn ha scritto:Posso chiedere una stipidata? Ammittiamo che io voglia inserire quest mod in un documento tipo php a a parte senza intaccare il codice dell'index avendo così il tutto maggiormente pulito....sarebbe possibile farlo?

Certamente, basta creare una Custom Page. Vedi http://www.phpbbitalia.net/forum/creare-una-pagina-personalizzata-t23.html
La Mod è normalmente inserita nell'index perchè si presenta automaticamente nella pagina "Indice" del Forum, ma niente vieta di inserirla in una pagina diversa.
Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
 
Messaggi: 2490
Iscritto il: 07/01/2010, 9:51
Località: Udine
Versione: 3.0.10
MOD:
Server: UNIX/Linux
phpBB SEO: No
PHP: 5.2.9
Database: MySQL 5.0.77

Re: [DEV] View Last Pictures 2

Messaggioda gennyna » 23/02/2010, 12:42

e se le immagini invece di trovari negli allegati si trovassero nei tag [img] e [thumbnail]?
Avatar utente
gennyna
Utente
Utente
 
Messaggi: 1017
Iscritto il: 11/07/2009, 18:31
Versione: 3.0.10
MOD:
Server: UNIX/Linux
phpBB SEO:

Re: [DEV] View Last Pictures 2

Messaggioda Micogian » 23/02/2010, 12:55

gennyna ha scritto:e se le immagini invece di trovari negli allegati si trovassero nei tag [img] e [thumbnail]?

Ma fisicamente dove sono archiviati i file ?
Delle immagini tra i tag [img] e [thumbnail] ne avevamo già parlato.
Il problema non è ricavare l'immagine tra i tag, ma tutta una serie di informazioni come sapere quali sono i Topics che le contengono, se hanno una dimensione variabile, come le devo visualizzare, ecc.
Ovvio che il meccanismo cambia.
Questa MOD preleva i dati dal Database, in particolare dalla tabella phpbb_attachments.
Preleva gli allegati, vede in che Topic sono inseriti, le copia per renderle meno pesanti e le visualizza in una striscia che è un link alla discussione e passando sopra con il mouse si visualizza il titolo e il Forum d'origine.

Se dovessi recuperare il nome di un link tra i tag [img ]xxx[/img] o [thumbnail]xxx[/thumbnail] userei le funzioni
str_replace() e explode() per creare un array.
Con
Codice: Seleziona tutto
$text_tmp = str_replace("[img]", [/img], $post_text)
modifico il tag [img ]per renderlo uguale al tag di chiusura[/img].
A questo punto creo un array del testo suddividendolo in base alla stringa [/img]
Codice: Seleziona tutto
$str_array = explode("[/img]" $text_tmp)

In questo modo ottengo un array del Testo suddiviso dal tag [/img] il che sta a significare che il secondo campo dell'array ($str_array[1]) sarà il link compreso nei TAG.
Stessa cosa per [thumbnail]
Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
 
Messaggi: 2490
Iscritto il: 07/01/2010, 9:51
Località: Udine
Versione: 3.0.10
MOD:
Server: UNIX/Linux
phpBB SEO: No
PHP: 5.2.9
Database: MySQL 5.0.77

Re: [DEV] View Last Pictures 2

Messaggioda gennyna » 23/02/2010, 13:46

e deove inserisco cioò?
Avatar utente
gennyna
Utente
Utente
 
Messaggi: 1017
Iscritto il: 11/07/2009, 18:31
Versione: 3.0.10
MOD:
Server: UNIX/Linux
phpBB SEO:

Re: [DEV] View Last Pictures 2

Messaggioda Micogian » 23/02/2010, 16:08

Io ho scritto
Il problema non è ricavare l'immagine tra i tag, ma tutta una serie di informazioni come sapere quali sono i Topics che le contengono, se hanno una dimensione variabile, come le devo visualizzare, ecc.
Ovvio che il meccanismo cambia.

Prima devi chiarire come funziona il tuo Forum, dove sono i file originali, in quali Topics vengono inserite le immagini, se su tutti o solo in alcuni, eccetera.
Cerca di spiegare come lavori, solo così posso capire se c'è una soluzione e come svilupparla.

Non dirmi di andare a guadare il Sito, non ho il tempo, mi basta una spiegazione semplice ma chiara di come funziona il sistema.
Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
 
Messaggi: 2490
Iscritto il: 07/01/2010, 9:51
Località: Udine
Versione: 3.0.10
MOD:
Server: UNIX/Linux
phpBB SEO: No
PHP: 5.2.9
Database: MySQL 5.0.77

Prossimo

Torna a MODs in sviluppo

SEO Search Tags

PHPBB3 view last pictures 2      ftp pics xxx      miniature di immagini esterne phpbb3      mods pictures      phpbb view Last picture      phpbb3 ultime allegati inseriti nella index      mod top pictures img            modview descrizione      phpbb3 view last pictures

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

  • Pubblicità
cron