Vai al contenuto
pingoso

4.x Sviluppo hook

Recommended Posts

pingoso

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!

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
BomAle

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

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
BomAle

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".

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
pingoso

Molto interessante Ale, grazie mille!

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

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Crea un account o accedi per lasciare un commento

You need to be a member in order to leave a comment

Crea un account

Iscriviti per un nuovo account nella nostra comunità. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora

×