Rimuovere i risultati di ricerca corrotti in bbPress

Come già sapete, il sito dei matematici che amministro usa bbPress come piattaforma per il forum. È un gran bel CMS ottimo per le funzioni essenziali, però c’è un bug relativo ai risultati della ricerca. La pagina fornisce i messaggi divisi in due categorie, “recenti” e “rilevanti”, però il problema sorge quando bbPress decide che un messaggio recente debba essere anche rilevante.

Il risultato ottenuto è un link (nella parte dei messaggi rilevanti) completamente corrotto, senza descrizione e duplicato del corrispondente sopra: qualcosa di simile a http://giovani.mathesisvicenza.it/forum/topic.php#post-.

Notate i messaggi 5 e 3

Chiaramente questo link duplicato male non è nulla di utile e risulta anche scomodo: una persona infatti potrebbe tentare di cliccarci sopra e non arrivare da nessuna parte. Per ovviare a questo problema ho provato a pensare a come poter distinguere facilmente gli elementi corrotti da quelli giusti. Sono giunto ad alcune conclusioni:

  • non si può discriminare direttamente l’url, in quanto viene direttamente stampato da una funzione di bbPress, non è salvato nell’array
  • un articolo malformato non ha un contenuto, viene visto come vuoto
  • ogni articolo sano deve avere un contenuto, altrimenti la ricerca non avrebbe restituito nulla

Alla luce di ciò, la cosa migliore mi è sembrata quella di fare una prima scansione dei messaggi rilevanti ed eliminare tutti quelli senza testo. Il codice seguente va inserito nel file search.php del tema da correggere e va prima della riga <?php if ( $relevant ) : ?>:

<?php
foreach ( $relevant as $elementKey => $bb_post ) {
if(!($bb_post->post_text)) unset($relevant[$elementKey]);
}
?>

A questo punto la ricerca lavora alla perfezione e senza doppioni. Se volete, provate pure quella dei Giovani Matematici di Vicenza.

RSS validi e robusti in bbPress

Nel mio precedente articolo sulle risorse più utili per bbPress vi avevo preannunciato alcuni problemi con i feed RSS, almeno quelli del tema di default (Kakumei). Credo comunque che molti temi derivati utilizzino il template degli RSS di default, in quanto non c’è poi molto da cambiare.

Questa è la lista dei problemi che ho riscontrato finora e che ho risolto (spero) nel sito che amministro:

  • Il contenuto dei messaggi non viene processato dai plugin. Se ad esempio uso il plugin che mi sostituisce le emoticon digitate con immagini di smilies, nei feed RSS continuo a vedere le emoticon testuali, e così via.
  • Una descrizione del sito lunga o con il carattere di virgoletta doppia “»” (che viene inserito automaticamente da bbPress!) spesso “rompe” l’anteprima del feed in Firefox, mentre ad esempio su Google Reader funziona.
  • Le date vengono tradotte in lingua se si usano dei file di localizzazione, violando il formato RFC-822 e quindi quello RSS.
  • Bisogna assicurarsi che il feed non contenga codice HTML puro, o in alternativa che questo venga opportunamente isolato nei tag CDATA e filtrato (c’è un problema con il carattere di spazio lungo &nbsp; per esempio).
  • Quando si prende il testo del messaggio processato dai plugin si ottiene una doppia codifica (e pure insolita) per il carattere ampersand “&”.

Bando alle ciance, questo è il codice. Dovete aprire la cartella del vostro tema, cercare il file rss2.php e sostituire integralmente il contenuto con questo:


<?php
header( 'Content-Type: text/xml; charset=UTF-8' );
echo '<' . '?xml version="1.0" encoding="UTF-8"?' . '>' . "\n";
bb_generator( 'comment' );

function datefix($buffer) {
	/*
	 * fix della data in modo da tenerla in inglese, rispettando
	 * le specifiche dei feed RSS
	 */
	 return gmdate('D, d M Y H:i:s +0000', $buffer);
}

function callback($buffer)
{
	/*
	 * sistema il codice rimuovendo la doppia codifica di "&" e
	 * rimuove il carattere "&nbsp;" che crea problemi con UTF-8
	 * in questo modo ho il testo del post dopo che i plugin (tipo
	 * le faccine) hanno applicato le loro modifiche html e ritorno
	 * il codice html senza entities ma in forma pura
	 */

	$single = str_replace("&#"."038;", "&", $buffer);
	$spaced = str_replace("&nbsp;", " ", $single);
	return html_entity_decode($spaced);
}

?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><?php echo $title; ?></title>
		<link><?php echo $link; ?></link>
		<description><![CDATA[<?php echo $description; ?>]]></description>
		<language><?php esc_html( bb_option('language') ); ?></language>
		<pubDate><?php echo gmdate('D, d M Y H:i:s +0000'); ?></pubDate>
		<?php bb_generator( 'rss2' ); ?>
		<textInput>
			<title><![CDATA[<?php _e('Search'); ?>]]></title>
			<description><![CDATA[<?php _e('Search all topics from these forums.'); ?>]]></description>
			<name>q</name>
			<link><?php bb_uri('search.php'); ?></link>
		</textInput>
		<atom:link href="<?php echo $link_self; ?>" rel="self" type="application/rss+xml" />

<?php foreach ($posts as $bb_post) : ?>
		<item>
			<title><?php post_author(); ?> <?php _e('on')?> "<?php topic_title( $bb_post->topic_id ); ?>"</title>
			<link><?php post_link(); ?></link>
			<pubDate><?php

			ob_start("datefix");
			bb_post_time('U');
			ob_end_flush();

			?></pubDate>
			<dc:creator><?php post_author(); ?></dc:creator>
			<guid isPermaLink="false"><?php post_id(); ?>@<?php bb_uri(); ?></guid>
			<description><![CDATA[<?php

			ob_start("callback");
			post_text();
			ob_end_flush();

			?>]]></description>
		</item>
<?php endforeach; ?>

	</channel>
</rss>

Potete verificare che il codice generato è correttamente validato sul sito del validatore W3C. Quello del sito dei Giovani Matematici di Vicenza è valido. 😛

Sono contento di aver risolto i problemi del feed (sperando di non averne causati altri) ma soprattutto questo mi ha permesso di imparare qualcosa in più sul formato RSS (che mi ha sempre affascinato ma di cui non ho mai saputo nulla). Fatemi sapere se avete problemi col codice o se volete suggerirmi delle migliorie!

Le risorse e i plugin più utili per bbPress

Da un po’ di tempo gestisco il sito dei Giovani Matematici di Vicenza (si può iscrivere chiunque sia interessato, anche fuori provincia!). Ultimamente abbiamo migrato la piattaforma da un vecchio Drupal che avevo messo su alla meno peggio (non sono molto pratico di Drupal purtroppo) alla combinazione WordPress + bbPress che funziona egregiamente.
Installare bbPress è molto semplice e fornisce di default delle ottime funzioni. Tuttavia vi voglio dare alcuni piccoli consigli per delle ottime aggiunte che si possono trovare tra i tanti plugin disponibili. Questo motore di forum non ha, come WordPress, l’integrazione e installazione dei plugin tramite interfaccia web. Bisogna caricare i plugin manualmente nella directory my-plugins, tuttavia non è così male.

Plugin

Integrazione con WordPress

Questa funzione è inserita di default in bbPress, tuttavia se volete farla funzionare dovete aggiungere dentro WordPress il plugin corrispondente.

Download

Allow images

Questo semplicissimo plugin permette agli utenti di inserire immagini nei messaggi. Serve nella maggior parte dei casi, ma dipende sempre da ciò di cui avete bisogno.

Download

Bavatars

Di default gli utenti possono usare solo l’avatar globale (Gravatar). Tramite Bavatars potete permettere agli utenti di caricare un avatar dal proprio PC che funzionerà nel forum. Se si vuole l’integrazione con WordPress bisogna prendere il file bavatars-wp.php e metterlo nella directory dei plugin di WordPress. Il problema è che questo file contiene degli errori. Le righe relative ai percorsi vanno modificate così (naturalmente con i dati del proprio sito):

define( 'BAVATARS_BBPRESS_URI', 'http://example.com/forum/' ); // The full address of the front page of your forum.
define( 'BAVATARS_BBPRESS_PATH',  getenv("DOCUMENT_ROOT").'/forum/' ); // The full path to your bbPress installation.

In questo modo è più semplice modificare i percorsi. Poi va anche modificato il codice di inserimento dell’immagine, perché non funziona proprio. Questo è il codice corretto, da sostituire verso la fine del file:

return '<img alt="' . $alt . '" src="' . trailingslashit( BAVATARS_BBPRESS_URI ) . $location . '" style="height:' . $size . 'px; width:' . $size . 'px;">';

Infine ovviamente il plugin va attivato anche da WordPress.

Download

bbPress Signatures

Consente agli utenti di avere una firma sotto ai messaggi, con i tag html consentiti nei messaggi. Si possono impostare la lunghezza massima e il numero di righe, e anche la possibilità di avere una sola firma per ciascun utente su una pagina.

Download

bbPress Smilies

Abilita gli smile su bbPress in modo simile a quanto facciano altri plugin su WordPress. Infatti usano sostanzialmente gli stessi temi, e vi consiglio di impostare il tema Tango su entrambe le piattaforme (si fa modificando una delle prime righe nei sorgenti, leggete sempre i README comunque).

Se volete usare la casella visuale di inserimento dei messaggi (ne parlo più in basso) dovete eliminare dal codice del plugin la presenza del pulsante delle faccine, altrimenti “rompe” l’altro plugin.

//add_action('post_form','bbClicker',($bb_smilies['popup'] ? 20 : 9));
//add_action('edit_form','bbClicker',($bb_smilies['popup'] ? 20 : 9));

Download

BB Wysiwyg Editor

Trasforma in un attimo la casella dei messaggi in un piccolo editor in cui si vede subito come apparirà il messaggio scritto, permettendo di usare dei comodi pulsanti per modificare la formattazione. Utilizza un software esterno, jwysiwyg, che vi consiglio di scaricare e sovrascrivere dentro la cartella del plugin in quanto fornisce interessanti funzioni e miglioramenti.

Inoltre si può anche personalizzare l’aspetto della barra tramite apposite opzioni spiegate sul sito di jwysiwyg. Io ad esempio uso queste:

$(function() {
 $('#post_content').wysiwyg({
 controls: {
 indent : { visible : true },
 outdent : { visible : true },
 insertHorizontalRule : { visible : false },
 removeFormat : { visible : true },
 justifyLeft : { visible : false },
 justifyRight : { visible : false },
 justifyCenter : { visible : false },
 justifyFull : { visible : false },
 h1 : { visible : false },
 h2 : { visible : false },
 h3 : { visible : false }
 },
 css : bb_wysiwyg_editor_url + "bb-wysiwyg-editor.css",
 rmUnwantedBr : true,
 brIE: false
 });
});

Per poter sfruttare bene la possibilità di modifica dei messaggi occorre modificare il tema di bbPress. Infatti quando si apre la casella di modifica, di solito, il testo del messaggio deve venire “filtrato” di nuovo per ritornare facilmente leggibile dall’utente che lo modifica a mano. Il fatto è che invece per la casella visuale, che usa il codice HTML, occorre il messaggio originale senza modifiche. Per questo motivo, occorre intervenire sul file edit-form.php.

<textarea name="post_content" cols="50" rows="8" id="post_content"><?php /*
 * non voglio che nella modifica dei messaggi vengano tolti i tag
 * tanto ho la casella visuale per modificare i messaggi!
 */
 echo get_post_text();
 ?></textarea>

Per ottenere un effetto ancora migliore si può anche dare dei piccoli ritocchi al CSS contenuto nella cartella del plugin:

body {
/* caratteri e stile a piacere */
font-family: 'Trebuchet MS','Lucida Grande',Verdana,Tahoma,Arial;
font-size: .8em;
}
p:first-child {
/* toglie i margini causati dalla modifica di un messaggio già inserito */
margin-top: 0px;
}
p:last-child {
margin-bottom: 0px;
}

Infine è possibile aggiungere alla barra pulsanti personalizzati che richiamano funzioni in Jquery, ma devo ancora provare questa possibilità.

Download

Mini Stats

Visualizza delle statistiche sull’attività del forum. Richiede alcuni piccoli ritocchi nel tema per visualizzarlo dove si vuole e si può tradurre in italiano modificando il codice in PHP a mano.

Download

reCAPTCHA bbPress

Il metodo definitivo per bloccare le iscrizioni spam al forum. Richiede un account reCAPTCHA, gratuitamente ottenibile (fornito da Google), inoltre esiste pure un analogo per WordPress.

Download

Notifiche via email

Esiste un vecchio plugin che funzionava con la versione 0.9 ma a quanto pare non funziona più molto bene. A quanto dicono nelle versioni trunk sono inserite le notifiche come funzione integrata, ma non ho ancora provato ad aggiornare.

Maggiori informazioni

Altre risorse

Lingua italiana

Proprio oggi ho trovato una traduzione molto migliore di quella che usavo prima. Ho dovuto modificare manualmente solo 2-3 frasi aprendo il file .po con un editor di testo semplice (per modificare anche le frasi originali) e poi ho compilato il .mo con POEdit. Vi metto qui il download alla mia versione.

I file vanno inseriti nella directory my-languages nella root del forum (va creata) e poi bisogna modificare il file di preferenze di bbPress con la riga define( 'BB_LANG', 'it_IT' );.

Download

Aspetto grafico

Questo è un aspetto su cui mi sto documentando. Esistono diversi temi per bbPress, anche se molti siti di solito integrano il tema di default con elementi comuni come l’intestazione e il footer, modificando codice PHP e CSS. Un esempio è il forum di Dropbox. La cosa migliore da fare è copiare nella directory my-templates il tema di default, Kakumei, rinominandolo (anche dentro al file CSS dove sono contenuti i metadati) e iniziando con le modifiche. Si inizia solitamente dai colori, per poi passare a cose più sofisticate.

Un metodo classico per farlo è usare la cosiddetta “deep integration” che però è abbastanza pesante in quanto carica tutto WordPress ad ogni esecuzione di bbPress. Una possibilità interessante e più leggera invece consiste nell’adoperare un plugin per WordPress chiamato PixoPoint Theme Integrator: questo permette di catturare dei pezzi di codice generati da WordPress e includerli con delle semplici direttive in PHP, fornendo tra l’altro maggiore versatilità.

Conclusione

Spero di aver dato una panoramica generale sulle possibilità abbastanza “semplici” di rendere bbPress ancora più bello e funzionale. Se avete qualche domanda come sempre chiedete pure, e sono ansioso di leggere i vostri tips&tricks su bbPress.

Caleidoscopio per Gimp 2.6

Sono rimasto sorpreso dal fatto che in rete non si trovino informazioni in merito.

Il caleidoscopio è un bel plugin sviluppato originariamente da Kelly Martin. Mi ricordo che l’avevo utilizzato tempo fa, e poi me ne ero anche dimenticato.

caleidoscopio
Esempio di utilizzo del plug-in

Un fatto abbastanza inquietante è che il plugin una volta era presente nel registro, ma ora non c’è più. Dopo alcune ricerche, sono stato fortunato. Ho trovato il codice sorgente completo sul sito canadese di Puppy Linux.

Poi ho anche trovato in rete delle istruzioni per compilarlo, ed ho avuto modo di constatare che lavora perfettamente anche in Gimp 2.6. 😀

Per prima cosa scaricate il codice sorgente dal link sopra riportato, oppure se si sognassero di toglierlo, ne trovate il contenuto qui. A questo punto, ponendo che voi abbiate il file nella vostra home, non vi resta che installare una dipendenza necessaria e poi compilarlo (attraverso il terminale, naturalmente):

sudo apt-get install libgimp2.0-dev
gimptool-2.0 --install kaleidoscope.c

Riaprite Gimp, e andate a cercare in Filtri > Distorsioni… 😉