Vai al contenuto

Sviluppo hook

Featured Replies

Inviato

Ciao a tutti,

mi sto cimentando nello sviluppo di un (una?) hook per il mio forum basato sull'ultima versione della IP.Suite 4.

Sostanzialmente vorrei andare a pescare la prima discussione pinned di una particolare sezione (sarebbe bello impostarlo da settings) e ricavarne: titolo e contenuto del primo post.

Queste informazioni dovranno successivamente venir visualizzate nella index del forum.

Ho cominciato con l'estensione di un Theme hook così da inserire un div, che andrà ad ospitare il contenuto dinamico, nella posizione corretta della index.

Ora però non ho alcuna idea di come andare a ricavare le informazioni che sto cercando.

Qualcuno mi sa indirizzare ad una buona guida che spiega il principio di sviluppo plugin per IP.Suite ?

La community ufficiale è piuttosto scarna a riguardo...

 

Grazie e saluti!

Inviato

Questo è il codice che probabilmente stai cercando... utilizzando l'app Pages puoi inserire il widget ovunque vuoi, bisogna scegliere se delegare ad un template il lavoro di "parsing"1 o avere pieno controllo sulla parte html2.

1. Riutilizzare un widget precostruito nel app forums

{{$sezione	= '2';}}
{{$firstPost = \IPS\forums\Topic\Post::constructFromData( \IPS\Db::i()->select( '*', 'forums_posts', array( 'topic_id=? AND queued=0', \IPS\Db::i()->select( 'tid', 'forums_topics', array( 'forum_id=? AND approved=1 AND pinned=1', $sezione ), 'start_date DESC', 1 )->first() ), 'post_date ASC', 1 )->first() );}}

{{if !empty( $firstPost ) AND $firstPost->item()->canView()}}
{{$title = "Topic importanti della sezione {$firstPost->container()->_title}";}}
{template="postFeed" group="widgets" location="front" app="forums" params="array($firstPost), $title"}
{{endif}}

2. Avere pieno controllo sull'html e personalizzarlo ulteriormente.

{{$sezione	= '2';}}
{{$firstPost = \IPS\forums\Topic\Post::constructFromData( \IPS\Db::i()->select( '*', 'forums_posts', array( 'topic_id=? AND queued=0', \IPS\Db::i()->select( 'tid', 'forums_topics', array( 'forum_id=? AND approved=1 AND pinned=1', $sezione ), 'start_date DESC', 1 )->first() ), 'post_date ASC', 1 )->first() );}}


{{if !empty( $firstPost ) AND $firstPost->item()->canView()}}
<h3 class='ipsWidget_title ipsType_reset'>Topic pinned della sezione <a href="{$firstPost->container()->url()}">{$firstPost->container()->_title}</a></h3>
<div class='ipsPad_half ipsWidget_inner'>
	<ul class='ipsDataList ipsDataList_reducedSpacing'>
		<li class='ipsDataItem'>
			<div class='ipsDataItem_icon ipsPos_top'>
				{template="userPhoto" group="global" app="core" params="$firstPost->author(), 'tiny'"}
			</div>
			<div class='ipsDataItem_main'>
              <a href="{$firstPost->item()->url()}" title='{lang="view_this_topic" sprintf="$firstPost->item()->title"}' class='ipsDataItem_title ipsType_break'>{wordbreak="$firstPost->item()->title"}</a>
			<br>
              <p class='ipsType_reset ipsType_medium ipsType_blendLinks'>
                <span>{lang="byline_nodate" htmlsprintf="$firstPost->author()->link()"}</span><br>
                <span class='ipsType_light'>{lang="topic_started_date" htmlsprintf="\IPS\DateTime::ts( $firstPost->item()->mapped('date') )->html()"}</span><br>
                {$firstPost->content()|raw}
				{{if $firstPost->editLine()}}
               	{$firstPost->editLine()|raw}
                {{endif}}
              </p>
			</div>
		</li>
	</ul>
</div>
{{endif}}

Bonus per controllare il risultato della query in genere utilizzo:

<textarea>{{$test = print_r($firstPost,1);}}{$test}</textarea>

 

La documentazione che ho utilizzato è:

1. Template syntax

2. Best pratices for your themes

 

Per costruire la query ho una installazione in locale di ips4 e con l'ausilio di NetBeans IDE 7.4 posso scoprire rapidamente come generare ciò che mi viene richiesto, ti consiglierei a proposito di seguire questo passaggio nel futuro... poichè la documentazione è assente sulle classi Db.php i vari metodi tra cui select()... contenuti in \system\Db\Db.php

 

Modificato da BomAle

Inviato

purtroppo bisogna tenere conto che se salta fuori un errore nel prelevare i valori dalla query occorre racchiudere il tutto da una clausola "try{...}catch(){...}" però non conosco se è possibile farlo dalla modalità html.

perciò è necessario integrare tale codice in un widget/plugin che sicuramente ha già la funzionalitá di restituire un valore vuoto invece di un "Error".

Inviato
  • Autore

Molto interessante Ale, grazie mille!

Questa sera se riesco do un'occhiata, poi faccio sapere cosa ne scaturisce!

Per favore accedi per lasciare un commento

Potrai lasciare un commento dopo aver effettuato l'accesso

Accedi Ora

Chi sta navigando 0

  • Nessun utente registrato visualizza questa pagina.

Informazioni importanti

Abbiamo inserito dei cookies nel tuo dispositivo per aiutarti a migliorare la tua esperienza su questo sito. Puoi modificare le impostazioni dei cookie, altrimenti puoi accettarli cliccando su continua. to insert a cookie message.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.