Elenco di Post Recenti divisi per gruppi di board

Aperto da franzfenix, Sabato - 27 Giugno 2015 - 19:28

0 Utenti e 1 Visitatore stanno visualizzando questa discussione.

franzfenix

ciao ragazzi :)
vorrei trasformare l'elenco dei post recenti in una cosa più funzionale per il mio forum, cioè trasformare questo elenco in usa sorta di "mini indice", cioè questo


Magari dividere anche per gruppi di categorie quei post di quelle board abilitate a tutti gli utenti.

La riga di codice in boardindex.template.php che ora è presente per i post recenti è la seguente
// This is the "Recent Posts" bar.
if (!empty($settings['number_recent_posts']))
{
echo '
<tr>
<td class="titlebg" colspan="2">', $txt[214], '</td>
</tr>
<tr>
<td class="windowbg" width="20" valign="middle" align="center">
<a href="', $scripturl, '?action=recent"><img src="', $settings['images_url'], '/post/xx.png" alt="', $txt[214], '" /></a>
</td>
<td class="windowbg2">';

// Only show one post.
if ($settings['number_recent_posts'] == 1)
{
// latest_post has link, href, time, subject, short_subject (shortened with...), and topic. (its id.)
echo '
<b><a href="', $scripturl, '?action=recent">', $txt[214], '</a></b>
<div class="smalltext">
', $txt[234], ' &quot;', $context['latest_post']['link'], '&quot; ', $txt[235], ' (', $context['latest_post']['time'], ')<br />
</div>';
}
// Show lots of posts.
elseif (!empty($context['latest_posts']))
{
echo '
<table cellpadding="0" cellspacing="0" width="100%" border="0">';

/* Each post in latest_posts has:
board (with an id, name, and link.), topic (the topic's id.), poster (with id, name, and link.),
subject, short_subject (shortened with...), time, link, and href. */
foreach ($context['latest_posts'] as $post)
echo '
<tr>
<td class="middletext" valign="top"><b>', $post['link'], ' </b>  ', $txt[525], ' ', $post['poster']['link'], ' (<i>', $post['board']['link'], '</i>)</td>
<td class="middletext" align="right" valign="top" nowrap="nowrap">', $post['time'], '</td>
</tr>';
echo '
</table>';
}
echo '
</td>
</tr>';
}


Vi ringrazio per qualunque consiglio e dritta

Flavio93Zena

Magari emanuele dirà il contrario ma secondo me sarebbe una query ammazza-server...

franzfenix

Citazione di: Flavio93Zena il Sabato - 27 Giugno 2015 - 19:54
Magari emanuele dirà il contrario ma secondo me sarebbe una query ammazza-server...
Mi spiegheresti meglio questa cosa? :)

Flavio93Zena

Come ho detto non sono sicuro ma ho idea che avrebbe un *forte* impatto sulle prestazioni, credo.

emanuele

Piccola domanda per vedere se ho capito bene... facciamo un esempio.
Mettiamo che hai 5 board, 2 a cui tutti hanno accesso, e 2 a cui solo alcuni hanno accesso solo gli admin.
Quello che tu vorresti nel primo blocco sono quindi solo i topic delle 2 board a cui tutti hanno accesso?
Quelli della board a cui solo gli admin hanno accesso, dove andrebbero? (Se devono esserci.)

franzfenix

Andrebbero nel nuovo box che sarebbe sotto al primo.
In questa nuova board ci vanno a finire post che possono essere letti dallo staff che appartengono a determinati gruppi.
Nel primo box(quello in cui ci vanno i post visibili a tutti)  mi sarebbe di grande utilità se i post fossero raggruppati per gruppi di board: quindi ci sarebbero dei "sottobox" dedicati a gruppi di board.
Se può essere d'aiuto possono spiegare proprio a quali board e gruppi mi riferisco, chiamandoli per nome

emanuele

Ok, stavo guardando nel posto sbagliato... (la pagina dei post recenti...)

Non credo sia impossibile, se non erro c'è anche una funzione in SSI che potrebbe essere riciclata per questo (ssi_recentPosts).
Quindi dovrebbe venire più o meno:

global $boarddir;
require_once($boarddir . '/SSI.php');
// Board comuni
ssi_recentPosts(10, array(1, 2, 3));

// Board specifiche
ssi_recentPosts(10, array(4, 5, 6));


gli "array(1, 2, 3)" sono gli id delle board che **NON** devono essere mostrate in quel blocco (sì, controintuitivo, ma non ho scritto io il codice... altrimenti era peggio. :P), quindi nel primo esempio il blocco conterrà i post recenti di tutte le board ad eccezione delle board 1, 2 e 3.

Prova, non sono 100% sicuro sia esattamente quello che intendevi tu, perché l'alternativa era prendere i 10 post recenti e suddividerli in base alle board, che sarebbe un altro modo di vedere la cosa.

franzfenix

#7
Ok tra un pò provo *.*
Questo codice quindi in quale file lo devo scrivere?
EDIT: quindi praticamente i numeri delle board devono essere gli stessi in quel codice che hai postato

emanuele

Se non ricordo male potrebbe essere BoardIndex.template.php

Citazione di: franzfenix il Lunedì - 29 Giugno 2015 - 12:19
EDIT: quindi praticamente i numeri delle board devono essere gli stessi in quel codice che hai postato
No (salvo coincidenze assurde).
Dovrai individuare tu le board che *non* devono essere elencate in un certo box e sostituire quei numeri con quelli corretti.

franzfenix

#9
cioè dovrebbe venire una cosa del genere

global $boarddir;
require_once($boarddir . '/SSI.php');
// Board comuni. Id delle board che NON devono essere mostrate in questo blocco. il blocco conterrà i post recenti di tutte le board ad eccezione delle board 1, 2 e 3.
ssi_recentPosts(10, array(169.0, 67.0, 70.0, 31.0, 33.0, 30.0, 180.0, 29.0, 28.0, 66.0, 27.0, 204.0, 20.0, 227.0, 242.0, 241.0, 240.0, 236.0, 237.0, 238.0, 235.0, 234.0, 233.0, 232.0, 231.0, 230.0, 229.0, 228.0, 239.0, 226.0, 225.0, 224.0, 14.0, 12.0, 15.0, 13.0));

// Board specifiche ministero
ssi_recentPosts(10, array(20.0, 227.0, 242.0, 241.0, 240.0, 236.0, 237.0, 238.0, 235.0, 234.0, 233.0, 232.0, 231.0, 230.0, 229.0, 228.0, 239.0, 226.0, 225.0, 224.0,));

// Board specifiche lezioni. Questo deve essere il blocco dei post delle lezioni
ssi_recentPosts(5, array(169.0, 67.0, 70.0, 31.0, 33.0, 30.0, 180.0, 29.0, 28.0, 66.0, 27.0, 204.0));

// Board specifiche case. Questo deve essere il blocco dei post delle case
ssi_recentPosts(5, array(14.0, 12.0, 15.0, 13.0));


quindi con questo codice dovrebbero venirmi 4 blocchi giusto?
e questo codice in che riga va inserito in boardindex.template.php?
va inserito in questo codice già presente che riguarda i post recenti?
// This is the "Recent Posts" bar.
if (!empty($settings['number_recent_posts']))
{
echo '
<tr>
<td class="titlebg" colspan="2">', $txt[214], '</td>
</tr>
<tr>
<td class="windowbg" width="20" valign="middle" align="center">
<a href="', $scripturl, '?action=recent"><img src="', $settings['images_url'], '/post/xx.png" alt="', $txt[214], '" /></a>
</td>
<td class="windowbg2">';

// Only show one post.
if ($settings['number_recent_posts'] == 1)
{
// latest_post has link, href, time, subject, short_subject (shortened with...), and topic. (its id.)
echo '
<b><a href="', $scripturl, '?action=recent">', $txt[214], '</a></b>
<div class="smalltext">
', $txt[234], ' &quot;', $context['latest_post']['link'], '&quot; ', $txt[235], ' (', $context['latest_post']['time'], ')<br />
</div>';
}
// Show lots of posts.
elseif (!empty($context['latest_posts']))
{
echo '
<table cellpadding="0" cellspacing="0" width="100%" border="0">';

/* Each post in latest_posts has:
board (with an id, name, and link.), topic (the topic's id.), poster (with id, name, and link.),
subject, short_subject (shortened with...), time, link, and href. */
foreach ($context['latest_posts'] as $post)
echo '
<tr>
<td class="middletext" valign="top"><b>', $post['link'], ' </b>  ', $txt[525], ' ', $post['poster']['link'], ' (<i>', $post['board']['link'], '</i>)</td>
<td class="middletext" align="right" valign="top" nowrap="nowrap">', $post['time'], '</td>
</tr>';
echo '
</table>';
}
echo '
</td>
</tr>';
}



EDIT: dato che abbiamo un forum per le prove tecniche 2.0.9 sto testando il codice lì.
il forum è http://www.giratempoweb.net/forum_new/index.php così potete vedere i post recenti modificati.

Per il codice ho capito che in ogni blocco vanno inserite tutte le board del primo blocco eccetto quella che vuoi far vedere (avevo capito che questa cosa era solo per il primo blocco), quindi il codice è questo:
global $boarddir;
require_once($boarddir . '/SSI.php');
// Board comuni
ssi_recentPosts(4, array(2.0, 3.0, 4.0));

// Board specifica 2 (indicare tutte le board in Board comuni eccetto la 2)
ssi_recentPosts(2, array(1.0, 3.0, 4.0));

// Board specifica 3 (indicare tutte le board in Board comuni eccetto la 3)
ssi_recentPosts(2, array(1.0, 2.0, 4.0));

// Board specifica 4 (indicare tutte le board in Board comuni eccetto la 4)
ssi_recentPosts(2, array(1.0, 2.0, 3.0));


però il problema adesso è la visualizzazione XD come posso fare vedere ogni riga com'era prima (ovvero titolo in grassetto, data e orario spostati a destra, ecc) ?

EDIT X 2: ok, ho trasferito questi codici adattandoli alla versione 1.1 ma penso che il numero delle board sia imcomplato perchè vengono visualizzate board un pò a casaccio e poi mi crea una visualizzazione errata per le tabelle :( devo mettere a posto :/
il codice a cui sono arrivato a modificare per ora è tra la riga 580 alla riga 715.
avrò fatto sicuramente casini con i tag delle tabelle riguardanti l'Info Center...

emanuele

Devo provarlo, ma al momento non ho sottomano nessun SMF 1.1, domani...

franzfenix

#11
Il codice riguardande le board dovrebbe essere questo quello corretto (o almeno spero di non aver dimenticato qualcosa)
global $boarddir;
require_once($boarddir . '/SSI.php');
// Board Ministero. Quindi sono segnate TUTTE le board eccetto quelle del ministero che sono: 34.0, 188.0, 224.0, 225.0, 226.0, 227.0, 228.0, 229.0, 230.0, 231.0, 232.0, 233.0, 234.0, 235.0, 236.0, 237.0, 238.0, 239.0, 240.0, 241.0, 242.0
ssi_recentPosts(5, array(1.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 42.0, 43.0, 45.0, 46.0, 47.0, 48.0, 50.0, 51.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 61.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77,0, 78.0, 79.0, 80.0, 81.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0, 90.0, 91.0, 92.0, 93.0, 99.0, 100.0, 101.0, 102.0, 104.0, 105.0, 106.0, 107.0, 108.0, 109.0, 110.0, 111.0, 112.0, 113.0. 114.0, 115.0, 116.0, 117.0, 119.0, 120.0, 121.0, 122.0, 123.0, 124.0, 125.0, 126.0, 127.0, 128.0, 129.0, 130.0, 131.0, 133.0, 134.0, 135.0, 136.0, 137.0, 139.0, 140.0, 141.0, 142.0, 143.0, 144.0, 145.0, 146.0, 147.0, 148.0, 150.0, 151.0, 152.0, 153.0, 154.0, 155.0, 156.0, 157.0, 158.0, 159.0, 160.0, 161.0, 162.0, 163.0, 168.0, 169.0, 170.0, 171.0, 172.0, 174.0, 176.0, 177.0, 178.0, 179.0, 180.0, 181.0, 183.0, 186.0, 190.0, 191.0, 192.0, 193.0, 201.0, 202.0, 203.0, 204.0, 205.0, 206.0, 207.0, 211.0, 212.0, 213.0, 214.0, 215.0, 216.0, 217.0, 218.0, 219.0, 220.0, 221.0, 222.0, 243.0, 244.0, 245.0, 246.0, 247.0, 248.0, 249.0, 250.0, 251.0, 252.0, 253.0, 258.0, 259.0, 260.0, 261.0, 262.0, 263.0, 264.0, 265.0, 266.0, 267.0, 268.0, 269.0, 270.0, 271.0, 272.0, 273.0, 274.0, 275.0, 276.0, 277.0, 278.0, 279.0, 280.0, 281.0, 282.0, 283.0, 284.0, 285.0, 286.0, 287.0, 288.0, 289.0, 290.0, 291.0, 292.0, 293.0, 294.0, 295.0, 296.0, 297.0, 298.0, 299.0, 300.0, 301.0, 302.0, 303.0, 304.0, 305.0, 306.0, 307.0, 308.0, 309.0, 310.0, 311.0, 314.0, 315.0, 316.0, 317.0, 318.0, 319.0, 320.0));

// Board Lezioni. Quindi sono segnate TUTTE le board eccetto quelle delle lezioni che sono: 20.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 66.0, 67.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77,0, 78.0, 79.0, 80.0, 81.0, 92.0, 127.0, 133.0, 134.0, 135.0, 136.0, 137.0, 147.0, 148.0, 169.0, 170.0, 181.0, 204.0, 205.5, 215.0, 311.0, 314.0, 315.0, 316.0, 317.0, 318.0, 319.0, 320.0
ssi_recentPosts(5, array(1.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 16.0, 17.0, 18.0, 19.0, 21.0, 22.0, 23.0, 24.0, 25.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 42.0, 43.0, 45.0, 46.0, 47.0, 48.0, 50.0, 51.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 61.0, 62.0, 63.0, 64.0, 65.0, 68.0, 69.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0, 90.0, 91.0, 93.0, 99.0, 100.0, 101.0, 102.0, 104.0, 105.0, 106.0, 107.0, 108.0, 109.0, 110.0, 111.0, 112.0, 113.0. 114.0, 115.0, 116.0, 117.0, 119.0, 120.0, 121.0, 122.0, 128.0, 129.0, 130.0, 131.0, 139.0, 140.0, 141.0, 142.0, 143.0, 144.0, 145.0, 146.0, 150.0, 151.0, 152.0, 153.0, 154.0, 155.0, 156.0, 157.0, 158.0, 159.0, 160.0, 161.0, 162.0, 163.0, 168.0, 171.0, 172.0, 174.0, 176.0, 177.0, 178.0, 179.0, 180.0, 183.0, 186.0, 190.0, 191.0, 192.0, 193.0, 201.0, 202.0, 203.0, 206.0, 207.0, 211.0, 212.0, 213.0, 214.0, 216.0, 217.0, 218.0, 219.0, 220.0, 221.0, 222.0, 243.0, 244.0, 245.0, 246.0, 247.0, 248.0, 249.0, 250.0, 251.0, 252.0, 253.0, 258.0, 259.0, 260.0, 261.0, 262.0, 263.0, 264.0, 265.0, 266.0, 267.0, 268.0, 269.0, 270.0, 271.0, 272.0, 273.0, 274.0, 275.0, 276.0, 277.0, 278.0, 279.0, 280.0, 281.0, 282.0, 283.0, 284.0, 285.0, 286.0, 287.0, 288.0, 289.0, 290.0, 291.0, 292.0, 293.0, 294.0, 295.0, 296.0, 297.0, 298.0, 299.0, 300.0, 301.0, 302.0, 303.0, 304.0, 305.0, 306.0, 307.0, 308.0, 309.0, 310.0, 34.0, 188.0, 224.0, 225.0, 226.0, 227.0, 228.0, 229.0, 230.0, 231.0, 232.0, 233.0, 234.0, 235.0, 236.0, 237.0, 238.0, 239.0, 240.0, 241.0, 242.0, 243.0, 244.0, 245.0, 246.0, 247.0, 248.0, 249.0, 250.0, 251.0, 252.0, 253.0, 258.0, 259.0, 260.0, 261.0, 262.0, 263.0, 264.0, 265.0, 266.0, 267.0, 268.0, 269.0, 270.0, 271.0, 272.0, 273.0, 274.0, 275.0, 276.0, 277.0, 278.0, 279.0, 280.0, 281.0, 282.0, 283.0, 284.0, 285.0, 286.0, 287.0, 288.0, 289.0, 290.0, 291.0, 292.0, 293.0, 294.0, 295.0, 296.0, 297.0, 298.0, 299.0, 300.0, 301.0, 302.0, 303.0, 304.0, 305.0, 306.0, 307.0, 308.0, 309.0, 310.0));


// Board Case. Quindi sono segnate TUTTE le board eccetto quelle delle case che sono: 12.0, 13.0, 14.0, 15.0, 123.0, 124.0, 125.0, 126.0
ssi_recentPosts(5, array(1.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 42.0, 43.0, 45.0, 46.0, 47.0, 48.0, 50.0, 51.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 61.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77,0, 78.0, 79.0, 80.0, 81.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0, 90.0, 91.0, 92.0, 93.0, 99.0, 100.0, 101.0, 102.0, 104.0, 105.0, 106.0, 107.0, 108.0, 109.0, 110.0, 111.0, 112.0, 113.0. 114.0, 115.0, 116.0, 117.0, 119.0, 120.0, 121.0, 122.0, 127.0, 128.0, 129.0, 130.0, 131.0, 133.0, 134.0, 135.0, 136.0, 137.0, 139.0, 140.0, 141.0, 142.0, 143.0, 144.0, 145.0, 146.0, 147.0, 148.0, 150.0, 151.0, 152.0, 153.0, 154.0, 155.0, 156.0, 157.0, 158.0, 159.0, 160.0, 161.0, 162.0, 163.0, 168.0, 169.0, 170.0, 171.0, 172.0, 174.0, 176.0, 177.0, 178.0, 179.0, 180.0, 181.0, 183.0, 186.0, 190.0, 191.0, 192.0, 193.0, 201.0, 202.0, 203.0, 204.0, 205.0, 206.0, 207.0, 211.0, 212.0, 213.0, 214.0, 215.0, 216.0, 217.0, 218.0, 219.0, 220.0, 221.0, 222.0, 243.0, 244.0, 245.0, 246.0, 247.0, 248.0, 249.0, 250.0, 251.0, 252.0, 253.0, 258.0, 259.0, 260.0, 261.0, 262.0, 263.0, 264.0, 265.0, 266.0, 267.0, 268.0, 269.0, 270.0, 271.0, 272.0, 273.0, 274.0, 275.0, 276.0, 277.0, 278.0, 279.0, 280.0, 281.0, 282.0, 283.0, 284.0, 285.0, 286.0, 287.0, 288.0, 289.0, 290.0, 291.0, 292.0, 293.0, 294.0, 295.0, 296.0, 297.0, 298.0, 299.0, 300.0, 301.0, 302.0, 303.0, 304.0, 305.0, 306.0, 307.0, 308.0, 309.0, 310.0, 34.0, 188.0, 224.0, 225.0, 226.0, 227.0, 228.0, 229.0, 230.0, 231.0, 232.0, 233.0, 234.0, 235.0, 236.0, 237.0, 238.0, 239.0, 240.0, 241.0, 242.0, 243.0, 244.0, 245.0, 246.0, 247.0, 248.0, 249.0, 250.0, 251.0, 252.0, 253.0, 258.0, 259.0, 260.0, 261.0, 262.0, 263.0, 264.0, 265.0, 266.0, 267.0, 268.0, 269.0, 270.0, 271.0, 272.0, 273.0, 274.0, 275.0, 276.0, 277.0, 278.0, 279.0, 280.0, 281.0, 282.0, 283.0, 284.0, 285.0, 286.0, 287.0, 288.0, 289.0, 290.0, 291.0, 292.0, 293.0, 294.0, 295.0, 296.0, 297.0, 298.0, 299.0, 300.0, 301.0, 302.0, 303.0, 304.0, 305.0, 306.0, 307.0, 308.0, 309.0, 310.0, 311.0, 314.0, 315.0, 316.0, 317.0, 318.0, 319.0, 320.0));

// Board comuni. Quindi sono segnate le board di Ministero, Lezioni, Case
ssi_recentPosts(10, array(34.0, 188.0, 224.0, 225.0, 226.0, 227.0, 228.0, 229.0, 230.0, 231.0, 232.0, 233.0, 234.0, 235.0, 236.0, 237.0, 238.0, 239.0, 240.0, 241.0, 242.0, 20.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 66.0, 67.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77,0, 78.0, 79.0, 80.0, 81.0, 92.0, 127.0, 133.0, 134.0, 135.0, 136.0, 137.0, 147.0, 148.0, 169.0, 170.0, 181.0, 204.0, 205.5, 215.0, 311.0, 314.0, 315.0, 316.0, 317.0, 318.0, 319.0, 320.0, 12.0, 13.0, 14.0, 15.0, 123.0, 124.0, 125.0, 126.0));


EDIT: il risultato finale che vorrei sarebbe questo:

emanuele

Prova l'allegato.
Cambia il nome con quello corretto, naturalmente.

franzfenix

#13
Ok grazie, ora provo!

EDIT: Il codice funziona e nei box finiscono i post giusti! *.* (EDIT2: ah sto notando però che nell'ultimo box (quello per le board comuni) finiscono post di board che ho impostato come non visibili, cioè di norma i nuovi post in queste board non appaiono nei post recenti. posso risolvere in qualche modo, tipo specificare che certe board non devono finire nei post recenti?)

però c'è un problema di visualizzazione dal secondo box in poi, manda in pappa la parte restante della tabella Centro Informazioni, ho fatto degli screenshot, eccoli:


emanuele

Una tabella di troppo.

Per eliminare board dal blocco "comune", poi mettere gli id nell'array:
$to_exclude = array();

Discussioni simili (3)