News:

Want to get involved in developing SMF, then why not lend a hand on our github!

Main Menu

SSI, base commune sur le site et sur le forum

Started by kenoh, February 06, 2012, 01:27:57 PM

Previous topic - Next topic

kenoh

Bonjour à tous,

Je reviens vers vous car je sais que la base SSI permet de lier pas mal de choses du forum au site, cependant je viens vers vous car je rencontre quelques problèmes d'optimisation je dirais.

Quand je fais une news sur le forum, cette news est repris à l'état brut sur le site, et une news qui fait 300 lignes ça rend très moche, j'aimerai donc savoir si il y a possibilité de couper la news du site avec un lire la suite qui redirige sur le site à un article entier.

Je ne sais pas si c'est clair mais si un admin est disponible pour m'aider je pourrais exposer en problème vocalement ce serait peut-être plus simple.

Merci d'avance de votre aide.

Garédo

si c'est vien les news que tu parles, nouvelles et infolettres

c'est ce bout de code dasn SSI.php
// Show what would be the forum news.
function ssi_news($output_method = 'echo')
{
global $context;

if ($output_method != 'echo')
return $context['random_news_line'];

echo $context['random_news_line'];
}


comme tu vois il n'y a pas de possibilité de couper directement dans la fonction avec un paramètre

mais tu peut modifier

echo $context['random_news_line'];

en

echo substr($context['random_news_line'],0,150);

pour couper le texte entre le premier et le 150 ieme caractère
ça doit le faire

Support de mes Mods et Themes graphique en français pour smf. C'est par ici ! 
Un gitan ça sent bon, ça se lave sans savon....

kenoh

#2
J'ai testé ça ne change rien

function ssi_boardNews, ce n'est pas plutôt dans cette partie qu'il faut modifier quelque chose pour que la news apparaisse sur le site en résumé ?

Je pense que ça se joue ici :
// Show the latest news, with a template... by board.
function ssi_boardNews($board = null, $limit = null, $start = null, $length = null, $output_method = 'echo')
{
global $scripturl, $db_prefix, $txt, $settings, $modSettings, $context;
global $smcFunc;

loadLanguage('Stats');

// Must be integers....
if ($limit === null)
$limit = isset($_GET['limit']) ? (int) $_GET['limit'] : 5;
else
$limit = (int) $limit;

if ($start === null)
$start = isset($_GET['start']) ? (int) $_GET['start'] : 0;
else
$start = (int) $start;

if ($board !== null)
$board = (int) $board;
elseif (isset($_GET['board']))
$board = (int) $_GET['board'];

if ($length === null)
$length = isset($_GET['length']) ? (int) $_GET['length'] : 0;
else
$length = (int) $length;

$limit = max(0, $limit);
$start = max(0, $start);

// Make sure guests can see this board.
$request = $smcFunc['db_query']('', '
SELECT id_board
FROM {db_prefix}boards
WHERE ' . ($board === null ? '' : 'id_board = {int:current_board}
AND ') . 'FIND_IN_SET(-1, member_groups)
LIMIT 1',
array(
'current_board' => $board,
)
);
if ($smcFunc['db_num_rows']($request) == 0)
{
if ($output_method == 'echo')
die($txt['ssi_no_guests']);
else
return array();
}
list ($board) = $smcFunc['db_fetch_row']($request);
$smcFunc['db_free_result']($request);

// Load the message icons - the usual suspects.
$stable_icons = array('xx', 'thumbup', 'thumbdown', 'exclamation', 'question', 'lamp', 'smiley', 'angry', 'cheesy', 'grin', 'sad', 'wink', 'moved', 'recycled', 'wireless');
$icon_sources = array();
foreach ($stable_icons as $icon)
$icon_sources[$icon] = 'images_url';

// Find the post ids.
$request = $smcFunc['db_query']('', '
SELECT id_first_msg
FROM {db_prefix}topics
WHERE id_board = {int:current_board}' . ($modSettings['postmod_active'] ? '
AND approved = {int:is_approved}' : '') . '
ORDER BY id_first_msg DESC
LIMIT ' . $start . ', ' . $limit,
array(
'current_board' => $board,
'is_approved' => 1,
)
);
$posts = array();
while ($row = $smcFunc['db_fetch_assoc']($request))
$posts[] = $row['id_first_msg'];
$smcFunc['db_free_result']($request);

if (empty($posts))
return array();

// Find the posts.
$request = $smcFunc['db_query']('', '
SELECT
m.icon, m.subject, m.body, IFNULL(mem.real_name, m.poster_name) AS poster_name, m.poster_time,
t.num_replies, t.id_topic, m.id_member, m.smileys_enabled, m.id_msg, t.locked, t.id_last_msg
FROM {db_prefix}topics AS t
INNER JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_first_msg)
LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member)
WHERE t.id_first_msg IN ({array_int:post_list})
ORDER BY t.id_first_msg DESC
LIMIT ' . count($posts),
array(
'post_list' => $posts,
)
);
$return = array();
while ($row = $smcFunc['db_fetch_assoc']($request))
{
// If we want to limit the length of the post.
if (!empty($length) && $smcFunc['strlen']($row['body']) > $length)
{
$row['body'] = $smcFunc['substr']($row['body'], 0, $length);

// The first space or line break. (<br />, etc.)
$cutoff = max(strrpos($row['body'], ' '), strrpos($row['body'], '<'));

if ($cutoff !== false)
$row['body'] = $smcFunc['substr']($row['body'], 0, $cutoff);
$row['body'] .= '...';
}

DeathSign

Oui c'est plutôt ssi_boardNews (l'autre ça doit être pour les "nouvelles") et dans les arguments que cette fonction prend, tu as $length pour limiter le nombre de caractères qu'il te renvoie. Il mettra des points de suspensions à l'endroit où ce sera éventuellement coupé.

kenoh

#4
Voilà c'est fait et ça fonctionne maintenant j'aurai voulu savoir si un lire la suite pouvait se mettre automatiquement et si on pouvait passer la limite au caractères à une limite en ligne car c'est pratiquement impossible d'utiliser toujours le même nombre de caractères pour que la news coupe au bon endroit.

Garédo

oups désolé
j'ai lu news et je suis partis sur nouvelle :D

Support de mes Mods et Themes graphique en français pour smf. C'est par ici ! 
Un gitan ça sent bon, ça se lave sans savon....

kenoh

Quelqu'un a une idée pour mon problème sinon ?

Je peux montrer un site qui utilise ce système si vous le souhaitez pour plus d'aisance

DeathSign

Et bien soit tu laisses la fonction ssi_boardNews d'origine en utilisant l'argument $output_method avec une valeur autre que 'echo' par exemple 'return' pour récupérer le résultat dans une variable. Dans ce cas, c'est un tableau qui est retourné donc tu tronques la valeur de 'body' de chaque sujet suivant le nombre de ligne (la fonction substr_count() pourrait être utile) et pour afficher le lien [Lire la suite] tu utiliseras la clé 'href' de chaque sujet. Cf. la boucle foreach à fin de la fonction ssi_boardNews

Soit tu modifies la fonction ssi_boardNews, les lignes intéressantes se trouvent vers la fin de la fonction (J'évite bien que ce soit plus facile).

kenoh

Malheureusement mon niveau est médiocre donc là pour moi c'est parler chinois, à part la première partie que j'ai compris.

DeathSign

Dommage ! Tu avais l'air pressé alors je t'ai décrit ce que tu pouvais faire dès que j'ai pu :)

Je verrais plus tard je suis sur la traduction du forum :)

kenoh

Ok fait ce que tu as à faire, on verra quand t'auras finis et merci beaucoup ;)

DeathSign

Ah ça me revient, j'avais tenté de faire ça aussi un jour mais je n'ai pas trouvé de moyen propre et simple de le faire.

Compter les sauts à la ligne ça va mais faut aussi prendre en compte les retours à la ligne automatique quand le texte est trop long. En PHP c'est pas top car selon ton thème le nombre de caractère qui peut tenir sur une ligne change. Côté Javascript ça pourrait être plus efficace. Finalement j'avais préféré faire attention moi-même pour éviter de couper n'importe où mais si tu as des exemples ailleurs et le code source qui va avec, ça m'intéresserait de voir.

kenoh

#12
http://www.fureur.org/
http://tera.luna-atra.fr/

Voici 2 exemples, j'espère que ça t'aidera.

Celui là semble être le plus adapté puisque le forum est en smf
http://www.remake-online.com/

DeathSign

Tiens... Je crois connaître celui qui s'appelle Monsieur Putois et qui a posté certaines news sur le deuxième site x)

Ils ne me disent pas grand chose, mais ce que j'ai déjà vu ce sont des sites qui proposent une version courte de leur news, donc la version qui sera affiché sur l'accueil, et une version longue qu'on pourra lire avec un lien tel que [Lire la suite]. L'avantage c'est qu'on contrôle ce qui est affiché, ça implique par contre de modifier la base de données et tout et tout...

J'ai installé quelques portails d'ici pour voir et ceux qui proposent une limite ne permet que de couper après un certain nombre de mot.

Bref pour le lien [Lire la suite] quand la news est tronqué, je disais ça :

Quote$board_news = ssi_boardNews(1, 1, null, null, 'return');

foreach ($board_news as $news)
{
   echo '
      <div class="news_item">
         <h3 class="news_header">
            ', $news['icon'], '
            <a href="', $news['href'], '">', $news['subject'], '</a>
         </h3>
         <div class="news_timestamp">', $news['time'], ' ', $txt['by'], ' ', $news['poster']['link'], '</div>
         <div class="news_body" style="padding: 2ex 0;">', $news['body'], substr($news['body'], -3) == '...' ? ' <a href="' . $news['href'] . '">[Lire la suite]</a>' : '', '</div>
         ', $news['link'], $news['locked'] ? '' : ' | ' . $news['comment_link'], '
      </div>';

   if (!$news['is_last'])
      echo '
      <hr />';
}

Change le premier null en rouge par la longueur max et fais attention à ce que la variable $txt de SMF soit accessible pour $txt['by']

kenoh

Le "Lire la suite" ne va pas rediriger sur le forum plutôt que sur le site ou il y a moyen d'entrer manuellement l'adresse ?

DeathSign


kenoh

Oui mais moi je cherche à faire comme sur le site en question, c'est à dire de rediriger sur la news entière du site.

Bon je sais qu'on est sur le forum smf mais est-ce que vous savez si VBulletin permet cela facilement ? Je demande car sur Luna-atra et Fureur c'est justement VBulletin qui est utilisé pour leur forum.

DeathSign

#17
En fait si je me calque sur l'exemple, ta "news entière du site" n'est ni plus ni moins qu'une autre interface du sujet sur le forum. Dans ce que je t'ai proposé, libre à toi de modifier les liens pour faire pointer la news vers une autre page que sur le forum. Je n'impose rien, je ne fais que des propositions qui peuvent être améliorées et les critiques sont les bienvenues :)

kenoh

Oui mais ce que je veux dire, c'est est-ce que tu penses que ça peut créer une page web automatiquement avec les données de la news ou pas ?

DeathSign

Bah en fait je suis perdu car je ne comprends pas pourquoi tu me poses cette question.

Tu es arrivé en disant que SSI permettait de faire le lien entre le forum et le site, ce qui est vrai. Par site moi je comprends une structure plus ou moins indépendante de SMF et qui ne fonctionne pas sur SMF, ça va d'une simple page dynamique à un script plus conséquent (framework, CMS...).

Partant de là, SSI offre bien quelques fonctions qui permettent d'intégrer du contenu et des fonctionnalités venant du forum à ton site comme afficher les membres connectés au forum. Donc non il ne te fera pas ta page, ce sera toujours à toi de coder mais grâce à SSI tu es automatiquement connecté à la base, ce qui te permet de faire directement tes requêtes et de traiter les résultats comme tu le sens et où tu le veux (comme il n'y a pas à ma connaissance de fonction déjà faite dedans pour retourner tout le contenu d'un sujet de discussion et les réponses associées).


C'est peut-être moi qui ne comprend pas, si quelqu'un voit plus clair x)

kenoh

En gros j'aimerais que la news du forum apparaisse sur le site mais je pense que seul VBulletin permet cela.

Grosraisin

Quote from: kenoh on February 10, 2012, 01:04:00 AM
En gros j'aimerais que la news du forum apparaisse sur le site mais je pense que seul VBulletin permet cela.

Correction: .... mais je pense que seul VBulletin permet cela facilement contrairement a smf ou il faut coder un peut plus ^^.


PS: sa m'intéresse aussi se truc la vu que je vais bientôt me lancé la dedans pour faire un pont entre smf et un site.

SMF / Le Partage et l'Entraide
SMF / Sharing and Caring


Mes modifications de Mods / Templates



Garédo

vous voulez que je vous fasse un mini exemple ?

j'avais dejà ça sur mon premier forum

Support de mes Mods et Themes graphique en français pour smf. C'est par ici ! 
Un gitan ça sent bon, ça se lave sans savon....

Garédo


Support de mes Mods et Themes graphique en français pour smf. C'est par ici ! 
Un gitan ça sent bon, ça se lave sans savon....

DeathSign


kenoh

Oui c'est exactement ce que je veux, t'es un dieu !!!

En fait oui c'est le lire la suite qui crée une news sur le site et les commentaire sur le fofo, c'est exactement ce que je cherchais

Maintenant la question est comment on gère ça ?^^

Garédo

#26
tu télécharge l'archive dans la zone de téléchargement et tu jette un yeu au code ;)

je prépare un petite amélioration niveau affichage des url  ^^

voilà c'est fait :p

Support de mes Mods et Themes graphique en français pour smf. C'est par ici ! 
Un gitan ça sent bon, ça se lave sans savon....

kenoh

C'est social links et demo_ssi que je dois prendre ?

Garédo

non juste le demo_ssi pour ce que tu cherche a faire

Support de mes Mods et Themes graphique en français pour smf. C'est par ici ! 
Un gitan ça sent bon, ça se lave sans savon....

kenoh

#29
Je t'ai envoyé un message privée afin que tu puisses voir les différents problèmes auquel je suis confronté en utilisant cette méthode, notamment le copyright qui merde et le menu de droite qui a disparu.

J'aurai voulu savoir si il était possible de choisir plusieurs sections du forum pour qu'ils apparaissent à l'accueil et avoir une partie catégorie ?

Garédo

Je préféré les demande d'aide sur le forum que par MP, que ce soit ici ou sur mon forum de demo.
Parce que comme ça chaque personne confronté a un problème peut trouver une solution dans celles des autres ;)

A tu compris le mode de fonctionnement de la coupure de texte ?
La coupure s'active dès que le texte contient 3 retours chariot ou 2 saut de lignes

explemple 1
2
3
coupure (coupure de n'affiche pas)

j'ai mis la variable qui peut etre changée au gout de chacun
$nomb_def = 300; // le nombre de caracteres par defaut
dans le cas ou le texte ne contient pas les fameux 3 retours chariot
donc si dans cette partie de texte tu as une quelconque balise html coupé avant sa fermeture, ça fausse obligatoirement l'affichage.

Quote from: kenoh on February 16, 2012, 03:00:58 PM
J'aurai voulu savoir si il était possible de choisir plusieurs sections du forum pour qu'ils apparaissent à l'accueil et avoir une partie catégorie ?

les deux chose sont faisable
mais il faudra continuer la demande sur mon forum pour voir les détails de ce que tu souhaite et  pas polluer de trop ici ;)

Support de mes Mods et Themes graphique en français pour smf. C'est par ici ! 
Un gitan ça sent bon, ça se lave sans savon....

kenoh

D'accord on suivra donc ça sur ton forum, mon intégrateur, Xeroth va reprendre les rênes mais je vais suivre ça de très prêt.

On parlera aussi du problème que nous avons rencontrés, avec le lire la suite car celui-ci ne nous redirige pas sur la news malheureusement.

kenoh

Merci encore de ton aide Garédo.

On aura certainement quelques questions à te poser mais ce problème-ci a été réglé grâce à toi.

Encore merci.

Grosraisin

Je rouvre se topic.

J'ai voulu m'inscrire sur le forum de Garédo mais le script anti bot est mort donc je poste ici et je l'es MP.

Voila mon problème la demo v2 ne marche pas chez moi (la v1 marche très bien).

Voici l'erreur
Fatal error: Call to undefined function db_query() in /home/prezmeal/public_html/Fonctions.php on line 335
Et voila la page demo:
http://prez-me-all.redheberg.com/

Je ne comprend pas pourquoi son code ne veut pas fonctionner chez moi.


Merci a vous, et je trouve cet demo v2 superbe bien faite.

SMF / Le Partage et l'Entraide
SMF / Sharing and Caring


Mes modifications de Mods / Templates



Garédo

desoler pour les soucis d'inscription
c'est réglé tu peut t'inscrire

j'ia trouver 2 ou 3 petites coquilles , mais rien qui puisse vraiment gener au fonctionnement
pas eu le temps de corriger faute de temps cause boulot

si tu tourne sur smf2 les erreurs sont normale
il me faut faire les modifications pour le SSI de smf2

smf1 et 2 n'appelle pas la base de donnée de la même manière, rien de compliquer a faire j'ai deja ça de pret, me faut juste le temps et la forme pour mettre a jour l'archive :p

a savoir aussi que je bosse actuellement sur Symphonie2, un framework qui devrait me permettre de faire un truc bien sympa si tout vas bien ^^

Support de mes Mods et Themes graphique en français pour smf. C'est par ici ! 
Un gitan ça sent bon, ça se lave sans savon....

Grosraisin

Ah ok tous s'explique ^^

J'espère que tu sortira sa rapidement :D

SMF / Le Partage et l'Entraide
SMF / Sharing and Caring


Mes modifications de Mods / Templates



Advertisement: