Vai al contenuto
  • 0

Sviluppo hook


pingoso

Domanda

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!

Link al commento
Condividi su altri siti

3 risposte a questa domanda

Messaggi raccomandati

  • 0

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
Link al commento
Condividi su altri siti

  • 0

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

Link al commento
Condividi su altri siti

Crea un account o accedi per lasciare un commento

Devi essere un membro per lasciare un commento

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora
  • Chi sta navigando   0 utenti

    • Nessun utente registrato visualizza questa pagina.
×
×
  • Crea Nuovo...

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.