Quelqu'un a-t-il essayé d'intégrer Datatables dans le corps du sujet ?

Bonjour la communauté,

Quelqu’un a-t-il essayé d’intégrer Data tables dans le corps d’un sujet ? Un plugin ou un thème ?

Merci,

2 « J'aime »

J’ai essayé de créer des tableaux avec quelques liens vers des images dans une cellule, mais sans succès. Voir : Comment créer un joli tableau dans un message ?

Par extension, je pense que Discourse de base ne le permet pas.

Si c’est possible, j’aimerais savoir comment.

Comme le site sur lequel je me trouve ne peut pas ajouter de nouveaux plugins selon le plan/contrat, je n’ai pas pu explorer cette option.

1 « J'aime »

Ouais, je ne sais pas comment mettre cela en œuvre.

Pas le bateau entier, mais peut-être assez bien pour vous lancer.


Afficher entrées
Rechercher :
NomPosteBureauÂgeDate de débutSalaire
Airi SatouComptableTokyo332008/11/28162 700 $
Angelica RamosDirecteur général (DG)Londres472009/10/091 200 000 $
Ashton CoxAuteur technique juniorSan Francisco662009/01/1286 000 $
Bradley GreerIngénieur logicielLondres412012/10/13132 000 $
Brenden WagnerIngénieur logicielSan Francisco282011/06/07206 850 $
Brielle WilliamsonSpécialiste en intégrationNew York612012/12/02372 000 $
Bruno NashIngénieur logicielLondres382011/05/03163 500 $
Caesar VanceSupport avant-venteNew York212011/12/12106 450 $
Cara StevensAssistant commercialNew York462011/12/06145 600 $
Cedric KellyDéveloppeur JavaScript seniorÉdimbourg222012/03/29433 060 $
NomPosteBureauÂgeDate de débutSalaire
Affichage de 1 à 10 sur 57 entrées

Le code HTML ci-dessus a été créé en ouvrant link fourni (en utilisant Chrome), en appuyant sur F12,
puis en sélectionnant HTML dans le visualiseur de code

ensuite (Windows) clic droit, sélectionnez CopierCopier le code HTML externe

et collé dans ce message.

Je sais qu’il ne possède pas toutes les fonctionnalités de l’original, mais au moins vous pouvez comparer ce code HTML avec l’original et voir ce que Discourse filtre pour comprendre ce que vous pouvez ou ne pouvez pas faire.

Aussi, si quelqu’un de plus fiable peut convertir cela en un Wiki afin que d’autres puissent voir le code HTML brut, cela serait apprécié.

J’espère que cela aide.


MODIFICATION

En développant sur la copie et le collage, j’ai copié toute la page et l’ai collée dans un message sur try.discourse.org pour voir si les boutons de tri passeraient. Pas de chance.}

1 « J'aime »

Ce résultat est simplement un tableau Markdown, pris en charge par Discourse :

2 « J'aime »

Super. Mais dispose-t-il de fonctionnalités de tableau de données comme le tri et la recherche ?

Non.

Ma meilleure hypothèse pour réaliser cela serait d’utiliser JavaScript, mais je ne sais pas dans quelle mesure cela sera filtré par Discourse. Lorsque j’ai rencontré les mêmes problèmes, j’en suis finalement arrivé à la conclusion qu’il serait plus facile de placer la page contenant les informations ailleurs et de fournir un lien. N’essayez pas de forcer Discourse à faire ce pour quoi il n’est pas conçu, et ne tentez pas de contourner la sécurité fournie par Discourse ; elle est là pour de bonnes raisons.

3 « J'aime »

C’est vrai, ma meilleure option consiste à ajouter le tableau de données dans une page HTML et à l’intégrer dans un sujet Discourse à l’aide d’une iframe.

Datatables est un plugin jQuery. Les plugins jQuery peuvent être implémentés assez facilement dans Discourse. Il existe quelques exemples à ce sujet, comme les composants de thème Tiles et Slick.

Essentiellement, ce que vous devez faire, c’est créer un décorateur pour les publications contenant des tableaux que vous souhaitez cibler avec DataTables.

J’ai créé un exemple montrant comment procéder ici :

et j’ai également préparé un aperçu sur le créateur de thèmes :

https://theme-creator.discourse.org/theme/Johani/discourse_datetables

C’est évidemment un peu basique pour l’instant et il manque quelques styles, mais cela devrait constituer un bon point de départ, car le tri, la recherche et la pagination fonctionnent parfaitement.

12 « J'aime »

C’est incroyable :slight_smile: Merci beaucoup

3 « J'aime »

J’ai plusieurs tableaux que je souhaite inclure dans mon forum, et votre approche fonctionne parfaitement. J’ai créé ce fichier d’initialisation de composant de thème :

import { apiInitializer } from 'discourse/lib/api';
import loadScript from 'discourse/lib/load-script';

export default apiInitializer('0.11.1', (api) => {
  api.decorateCookedElement(
    (elem, helper) => {
      const dataTables = $('[data-wrap="dataTables"] table', elem);
      if (!dataTables.length) return;

      loadScript('https://cdn.datatables.net/1.10.25/js/jquery.dataTables.min.js').then(
        () => {
          $.fn.dataTable.ext.errMode = 'throw';

          dataTables.dataTable({
            ajax: {
              url:
                'https://gist.githubusercontent.com/USERNAME/MY_GIST_ID/raw/data.json',
              dataSrc(data) {
                return data.map((x) => {
                  return {
                    id: x.my_id,
                    title: `${x.number} - ${x.title}`,
                  };
                });
              },
            },
            columns: [
              { data: 'id', title: 'Mon ID' }, 
              { data: 'title', title: 'Mon Titre' }
            ],
            dom: 'Bfrt',
          });
        }
      );
    },
    { id: 'discourse-my-custom-data-tables', onlyStream: true }
  );
});

Et je charge le tableau dans le message en utilisant ceci :

[wrap=dataTables]
<table></table>
[/wrap]

Cependant, il y a plusieurs éléments que je souhaiterais personnaliser pour chaque tableau et je ne suis pas sûr de la marche à suivre.

Par exemple :

  • Je voudrais utiliser un ID de Gist différent pour chaque tableau. Cela devrait être assez simple en passant un attribut au wrap puis en y accédant via elem.children[0].dataset.gist :

    [wrap=dataTables gist="some_gist_id"]
    <table></table>
    [/wrap]
    
  • Mais que faire si je veux plusieurs tableaux, chacun avec un code de traitement différent dans la fonction dataSrc ou des paramètres column ou dom différents ?

    Existe-t-il un moyen de passer un fichier de configuration JS à dataTables.dataTable() ?

3 « J'aime »

Y a-t-il un nombre fixe de variantes que vous utiliserez probablement pour différents tableaux, ou devrez-vous en créer de personnalisées pour chaque tableau ?

1 « J'aime »

Des personnalisations spécifiques pour chaque tableau.

Mon approche actuelle consiste à créer des fichiers JavaScript d’aide avec différentes configurations et à choisir entre eux via un attribut dans le bloc [wrap]. Ensuite, je fais :

dataTables.dataTable(Object.assign(commonConfig, specificConfig(myAttributes)))

Mais je serais curieux de savoir s’il existe une solution plus flexible.

1 « J'aime »