We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 34123
    • 103 Posts
    Bonjour à toutes et à tous,

    Après quelques tentatives infructueuses pour tenter d’insérer un lien de mon blog vers linkedIN (apparemment dans l’url a fournir il ne faut surtout pas utiliser le dash "-" et le .html, sinon ça ne marche pas, bref c’est pas le sujet.).

    Je me suis demandé s’il existait un plugin/hack qui permettait à l’heure actuelle, une fois un nouveau document créé dans Modx Revo, de générer automatiquement une URL raccourcie (en passant par un fournisseur du type bit.ly). Après quelques recherches dans les Extra je n’en ai pas vu. Je ne suis pas forcément développeur PHP dans l’âme, mais ça me tenterai de bien d’essayer d’intégrer cette nouvelle fonctionnalité.

    Mon objectif est de modifier le template du création du document pour arriver à cela (image créée de toute pièce wink ) :


    L’objectif finale est bien sûr lors de la publication d’un nouveau document de générer une url raccourcie pour intégrer celle-ci dans un tweet/mail ou autre (qui a dit LinkedIn)

    Comme il faut commencer par quelque part, j’ai déjà le code qui permet de générer des urls raccourcies (via le service bit.ly). Maintenant (et c’est le gros du boulot) l’intégration dans l’interface de Modx. Pourriez-vous m’indiquer de la doc sur les possibilités de modification de l’interface (et surtout est-ce possible).

    Frost
      Configuration Apache + Modx + MSSQL 2008
      ===============================
      Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.8
      OS : Windows 2008 R2
      SGBDR : Microsoft SQL Server 2008 (express)
      • 34123
      • 103 Posts
      Après quelques tâtonnements voici où j’en suis :

      Ajout de plusieurs champs : un label et un textbox.

      Après une petite discussion avec un membre de l’équipe de dev : pas question de modifier la DB de modx, on m’a conseillé d’utiliser une TV

      Edit 1 : Je vais me tourner plutôt vers un snippet qui fera le nécessaire le tout lié à une TV.

      Edit 2 : Ca avance doucement mais surement, j’ai réussi à récupérer 2 champs depuis la grille de propriétés, j’ai réussi à générer mon URL du site jusqu’à mon document (je pense que les documents de premier niveau fonctionnent, ceux dans des sous dossiers je dois voir), enfin voici ma petite capture pour en attester :



      Edit 3 : plus qu’à régler un pb de suffixe dans l’URL et après on passe à la phase de sécurisation
        Configuration Apache + Modx + MSSQL 2008
        ===============================
        Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.8
        OS : Windows 2008 R2
        SGBDR : Microsoft SQL Server 2008 (express)
        • 34123
        • 103 Posts
        Voici la première version du code (une partie est de moi, l’autre est d’une autre personne).

        Il faut crééer un snippet : shortURL
        Sur ce snippet il faut ajouter deux propriétés : Bitly_KEY (correspond à votre clé fourni par bit.ly), Bitly_LOGIN (votre login une fois enregistré sur ce service).

        Ce code est à valider sur votre environnement de test (il n’y pas pour l’instant pas de mécanisme de sécurité type isset ou autre) :

        <?php
        /* Retrieve properties from DB */
        
        $Bitly_KEY = $modx->getOption('Bitly_KEY', $scriptProperties, '');
        $Bitly_LOGIN = $modx->getOption('Bitly_LOGIN', $scriptProperties, '');
        $siteURL = $modx->getOption('site_url');
        $docID = $modx->resource->get('id');
        $docInfo = $modx->getObject('modResource',$docID);
        $docname = $docInfo->get('alias');
        
        $contentType = $docInfo->getOne('ContentType');
        $description = $contentType->get('description');
        $extension = $contentType->get('file_extensions');
        
        /* Check if it is in folder */
        $parent = $docInfo->get('parent');
        $path='';
        
        /* Checks if everything is correct */
        
        if (empty($Bitly_KEY)){
        $output="-No Bit.ly key, please create an account @ bit.ly website";
        return $output;
        die();}
        else{
        $output=$Bitly_KEY;
        }
        
        if (empty($Bitly_LOGIN)){
        $output="-No Bit.ly key, please create an account @ bit.ly website";
        return $output;
        die();}
        else{
        $output=$Bitly_LOGIN;
        }
        
        while ($parent != 0) {
        $docInfo = $modx->getObject('modResource',$parent);
        $alias = $docInfo->get('alias');
        $path = $alias . '/' . $path;
        $parent = $docInfo->get('parent');
        }
        $longurl = $siteURL . $path . $docname . $extension;
        $bitly = 'http://api.bit.ly/shorten?version=2.0.1&longUrl='.urlencode($longurl).'&login='.$Bitly_LOGIN.'&apiKey='.$Bitly_KEY.'&format=xml';
        
        $response = file_get_contents($bitly);
        //credits to davidwalsh.name
        //parse depending on desired format
        if(strtolower('xml') == 'json')
          {
            $json = @json_decode($response,true);
            return $json['results'][$longurl]['shortUrl'];
          }
          else //xml
          {
            $xml = simplexml_load_string($response);
            return 'http://bit.ly/'.$xml->results->nodeKeyVal->hash;
          }


        Ensuite il faut créer une TV par exemple tvShortURL et réaliser un bind avec la commande suivante

        @EVAL return $modx->runSnippet('shortURL');


        Il reste du travail dessus : sécuriser et surtout récupérer automatiquement l’id du document (ici dans le code on trouve l’id 18)

        Edit 1 : L’ID est maintenant récupéré automatiquement en utilisant $docID = $modx->resource->get(’id’); Le code est pleinement fonctionnel en l’état... Mais n’est sans doute pas adapté pour de la production (quid de la sécurité, de la gestion des erreurs)
          Configuration Apache + Modx + MSSQL 2008
          ===============================
          Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.8
          OS : Windows 2008 R2
          SGBDR : Microsoft SQL Server 2008 (express)
          • 34001
          • 428 Posts
          Hello,

          Je n’ai pas répondu jusqu’ici, mais je suis de près tes avancements (côté US également).
          Il faudra que je teste assez rapidement...

          Bravo et bon courage pour la suite. wink
            Intégrateur web freelance
            • 34123
            • 103 Posts
            Merci pour les encouragements,

            Pour la petite info, j’ai de grosses lacunes en terme de développement (j’ai passé une partie de mon temps à éplucher la documentation sur l’API de modx, sans rien y comprendre !!) et je pense qu’en ayant des bases correctes cela pourrait sans doute aller plus vite (vitesse de programmation).

            Après, la partie sécurisation puis enfin packaging m’intéresse tout autant, mais c’est hélas un problème de temps. Enfin une chose à la fois, voici une capture d’écran de ce que cela peut donner dans un exemple Live (à côté du permalink) :

              Configuration Apache + Modx + MSSQL 2008
              ===============================
              Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.8
              OS : Windows 2008 R2
              SGBDR : Microsoft SQL Server 2008 (express)
              • 34123
              • 103 Posts
              Bonsoir,

              Je pense qu’il est possible d’améliorer mon snippet. Mon objectif est de le sécuriser un tantinet, le problème c’est que je n’ai aucune connaissance dans ce domaine, s’il y avait quelques experts php qui souhaiteraient me guider sur les points sensibles de ce script, je ferai le nécessaire pour le corriger.

              Frost
                Configuration Apache + Modx + MSSQL 2008
                ===============================
                Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.8
                OS : Windows 2008 R2
                SGBDR : Microsoft SQL Server 2008 (express)
                • 33976 ☆ A M B ☆
                • 571 Posts
                Bonsoir,

                je viens de retomber sur GUS (Google Url Shortener). Je ne sais pas si tu y as déjà jeté un coup d’oeil, mais peut-être que cela pourra t’inspirer.

                Bon courage
                  • 34123
                  • 103 Posts
                  Merci pour les infos, toujours bon à prendre.

                  Techniquement la solution est fonctionnelle (ouf ! on est sauvé smiley ) Je pense qu’il faut sécuriser le tout, et parès je tenterai bien le passage pour le package, j’ai regardé un peu... Mais hélas c’est au delà de mes connaissances !

                  Frost
                    Configuration Apache + Modx + MSSQL 2008
                    ===============================
                    Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.8
                    OS : Windows 2008 R2
                    SGBDR : Microsoft SQL Server 2008 (express)
                    • 33976 ☆ A M B ☆
                    • 571 Posts
                    Pour le package, Bob Ray a publié de la documentation :
                    getMyComponent (extra) + documentation

                    Etudier les derniers packages de Shaun est également très instructeur.

                    Au besoin, si tu crées un repo sur Github, je pourrais essayer de filer un coup de main…
                      • 34123
                      • 103 Posts
                      Merci pour l’info,

                      Cette première version est fonctionnelle, mais nécessite un remaniement important :

                      Quand vous créez une nouvelle ressource, celle-ci ne posséde pas d’ID ni d’alias, ces informations sont créées uniquement lorsque votre ressource est sauvegardée.

                      Ce qui pose un problème lorsque vous cliquez sur l’onglet Template Variable. A corriger donc (je pense que cela est possible avec les différents évenements d’un document, le top serait d’éxecuter cette fonctionnalité quand un document est publié avec le bon template).
                        Configuration Apache + Modx + MSSQL 2008
                        ===============================
                        Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.8
                        OS : Windows 2008 R2
                        SGBDR : Microsoft SQL Server 2008 (express)