Cercando di modificare l’homepage di lineavariegata mi sono imbattuto in un curioso problema relativo a come buddypress gestisce le attività.
L’activity stream è una delle cose più simpatiche di buddypress e permette di generare un flusso di informazioni sulle varie attività fatte all’interno del sistema multi-site. Per la precisione, ogni volta che viene pubblicato,aggiornato, commentato ecc… un blog post, viene contestualmente generata l’attività relativa (basti cercare $activity_action in bp-blogs.php per vedere esattamente quando e come). Le informazioni generate sono, sostanzialmente, autore, link all’attività, tipo di attività.
Volendo modificare la stringa di testo con autore e link all’attività, sono partito dal Recent Site Wide Posts Widget (che uso appunto per generare gli ultimi post pubblicati) per capire dove venivano pescate le informazioni. Sono così finito in blogs/bp-blogs-templatetags.php ovvero dove vengono dichiarate le varie funzioni relative ai blog, riustilizzabili all’interno dei template (v. templatetags). Come me, altre persone con lo stesso problema sono arrivate lì a chiedersi “ma come diavolo posso modificare le informazioni di default sull’attività?”. La risposta la suggerisce Andy Peatling in questo commento, ma si poteva capire anche se siete andati a vedere il file bp-blogs.php di qui sopra. Siccome l’attività è generata al volo secondo la stringa autore+link, le uniche cose modificabili usando i template tags sono: data pubblicazione e meta link. Ma a noi non basta….
Quindi? Avete come me delle conoscenze relative di php? Ma volete modificare l’activity header a tutti i costi? Espressioni regolari!
Per la precisione ho copiato e modificato il Blogs Recent Posts Widget inserendo il seguente codice.
[php]
<div class="activity-header">
<?php
$string = bp_get_activity_action();
$pattern = ‘/(.* wrote a new blog post: )(.)(<span class="time.)/i’;
$replacement = ‘$2<br/>$3’;
echo preg_replace($pattern, $replacement, $string);
?>
</div>
[/php]
In sostanza prendo una stringa del tipo
[php]
<p><a title="autore" href="link_pagina_autore">Autore</a> wrote a new blog post: <a href="link_articolo/">Lorem ipsum</a> <span> 9 hours, 11 minutes ago</span> · <a title="View Thread / Permalink" href="permalink_articolo">View</a> · <a href="cacella_articolo">Delete</a></p>
[/php]
e grazie all’espressione regolare:
– tolgo la parte prima del link all’articolo
– mando a capo l’orario e i link
Fatto questo è bastato andarsi a prendere l’avatar dell’autore grazie a
[php]
<a href="<?php bp_activity_user_link() ?>">
<?php bp_activity_avatar( ‘type=full&width=60&height=60’ ) ?>
</a>
[/php]
e ho avuto tutte le informazioni necessarie a rifarmi l’homepage.