Jump to content
Sign in to follow this  
pingoso

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!

Share this post


Link to post
Share on other sites
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

 

Edited by BomAle

Share this post


Link to post
Share on other sites
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".

Share this post


Link to post
Share on other sites
pingoso

Molto interessante Ale, grazie mille!

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Crea Nuovo...

Important Information

By using this site, you agree to our Terms of Use.