[DEV] View Last Pictures 2

MODs in fase di sviluppo.
Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3702
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

[DEV] View Last Pictures 2

Messaggio da Micogian » 21/02/2010, 15: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
Haku
Utente
Utente
Messaggi: 2529
Iscritto il: 22/09/2009, 22:36
Sesso: Maschio
Versione: 3.0.9
Server: UNIX/Linux
Contatta:

Re: [DEV] View Last Pictures 2

Messaggio da Haku » 22/02/2010, 5:39

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

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3702
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: [DEV] View Last Pictures 2

Messaggio da Micogian » 22/02/2010, 8: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: 3702
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: [DEV] View Last Pictures 2

Messaggio da Micogian » 22/02/2010, 9: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
Sir Xiradorn
Grafico
Grafico
Messaggi: 1659
Iscritto il: 11/08/2009, 12:41
Sesso: Maschio
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.6.15
Database: MariaDB 10.1.9
Località: Lontano....
Contatta:

Re: [DEV] View Last Pictures 2

Messaggio da Sir Xiradorn » 23/02/2010, 0: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?
Sir Xiradorn
Immagine
~ XDojo - Xiradorn Lab Division - xiradorn.it ~
~ GitHub - XiradornLab ~

Immagine
Stargate - phpbb 3.0.x || 3.1.x || 3.2.x

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3702
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: [DEV] View Last Pictures 2

Messaggio da Micogian » 23/02/2010, 7: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 ... a-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
gennyna
Utente
Utente
Messaggi: 1017
Iscritto il: 11/07/2009, 18:31
Versione: 3.0.10
Server: UNIX/Linux
Contatta:

Re: [DEV] View Last Pictures 2

Messaggio da gennyna » 23/02/2010, 11:42

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

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3702
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: [DEV] View Last Pictures 2

Messaggio da Micogian » 23/02/2010, 11: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
gennyna
Utente
Utente
Messaggi: 1017
Iscritto il: 11/07/2009, 18:31
Versione: 3.0.10
Server: UNIX/Linux
Contatta:

Re: [DEV] View Last Pictures 2

Messaggio da gennyna » 23/02/2010, 12:46

e deove inserisco cioò?

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3702
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: [DEV] View Last Pictures 2

Messaggio da Micogian » 23/02/2010, 15: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.

Rispondi

Torna a “MODs in sviluppo”

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti