Insérer des pages via la base de données

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [Problème] Insérer des pages via la base de données

    Bonjour,

    J’ai plusieurs centaines pages à créer ainsi que les articles correspondants avec Joomla 2.5. Je souhaite créer un petit script php pour créer ces pages directement dans la base de données. Ce script devra donc insérer des lignes dans les tables "_menu", "_content" et "_assets". Mon problème est que je n’arrive pas à comprendre comment compléter les champs "lft" et "rgt" dans les tables "_menu" et "_assets". J’ai parcouru la page http://docs.joomla.org/Using_nested_sets mais vu mon niveau d’anglais et mes connaissances limitées de Joomla, j’ai de la peine à comprendre.

    Questions :
    • Est-il possible de laisser ces champs vides ?
    • Si oui, Quelles seraient les conséquences ?
    • Si non, comment définir les valeurs de ces champs ?



    Merci d’avance pour votre aide...

  • #2
    Re : Insérer des pages via la base de données

    Envoyé par jemsss Voir le message
    Bonjour,

    J’ai plusieurs centaines pages à créer ainsi que les articles correspondants avec Joomla 2.5. Je souhaite créer un petit script php pour créer ces pages directement dans la base de données. Ce script devra donc insérer des lignes dans les tables "_menu", "_content" et "_assets". Mon problème est que je n’arrive pas à comprendre comment compléter les champs "lft" et "rgt" dans les tables "_menu" et "_assets". J’ai parcouru la page http://docs.joomla.org/Using_nested_sets mais vu mon niveau d’anglais et mes connaissances limitées de Joomla, j’ai de la peine à comprendre.

    Questions :
    • Est-il possible de laisser ces champs vides ?
    • Si oui, Quelles seraient les conséquences ?
    • Si non, comment définir les valeurs de ces champs ?



    Merci d’avance pour votre aide...
    Bonjour,

    Pourquoi voulez vous remplir la table menu alors que vous souhaitez ajouter des articles ?
    Sinon pour information les champs lft et rgt sont des champs qui servent de borne et ne doivent jamais être vide.

    Commentaire


    • #3
      Re : Insérer des pages via la base de données

      Je remplis la table "menu" car je crée un lien de menu qui pointe vers l'article.
      Savez-vous comment je dois incrémenter les champs "lft" et "rgt"?

      Commentaire


      • #4
        Re : Insérer des pages via la base de données

        Envoyé par jemsss Voir le message
        Je remplis la table "menu" car je crée un lien de menu qui pointe vers l'article.
        Savez-vous comment je dois incrémenter les champs "lft" et "rgt"?
        en fait ça se comporte de façon d'arborescence

        Donc il n'est pas facile de générer toi-même les bornes.
        Je te conseille d'insérer tes articles en masse et de créer après par le biais de joomla tes menus.
        Dernière édition par TristanB à 02/07/2013, 17h24

        Commentaire


        • #5
          Re : Insérer des pages via la base de données

          Ce que je comprends pas, c'est que tu cherches à créer autant d'options de menu que tu as d'articles !!! Cela me paraît bizarre...

          Pour le lft rgt, comme le dit folcomedia, ces champs ne doivent pas être vide. En revanche j'ai été confronté à ce problème et j'ai créé un script avec un compteur que tu incrémentes à chaque insertion et qui aliment lft et rgt. Il faut bien partir du plus haut rgt présent je crois.
          A ce jour mon client ne s'est pas plaint donc cela doit fonctionner...
          Christophe
          http://www.webcrea.fr

          Commentaire


          • #6
            Re : Insérer des pages via la base de données

            Merci pour vos réponses.
            Je travaille sur un gros site trilingue qui contient de très nombreux articles classés par rubriques et sous-rubriques, qui sont tous accessibles depuis le menu principal à trois niveau. Je gagnerai plusieurs jours de travail ennuyeux en bossant depuis la bdd.
            Pour insérer les articles, je dois aussi créer des lignes dans la table "_assets" et donc utiliser les champs lft et rgt.

            Je viens de comprendre le fonctionnement de ces champs grâce à la discussion suivante : http://forum.joomla.fr/showthread.ph...-de-Joomla-1-6.
            Je pense que cela devrait me permettre de faire mon script...

            Commentaire


            • #7
              Re : Insérer des pages via la base de données

              si ça peut t'aider, voici le code de la migration d'un site 1.5 vers 1.7


              <?php ini_set('display_errors', 1);
              ini_set('error_reporting','E_ALL');
              ?>

              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
              <html xmlns="http://www.w3.org/1999/xhtml">
              <head>
              <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
              <title>copieContent</title>
              <style type="text/css">
              <!--
              .alerte {
              color: #F00;
              }
              .ok {
              color: #060;
              }

              -->
              </style>
              </head>

              <body>
              <?php


              $user = "";
              $pass = "";
              $host = "localhost";
              $db = "";
              mysql_connect( $host, $user, $pass ) or die("Impossible de se connecter au serveur MySQL");
              mysql_select_db($db) or die("Impossible de se connecter à la base de donnée $db");

              $query = "SELECT * FROM jos_content";
              echo "<p>Ok</p>";
              $compteur = 0;
              $left = 19;
              $asset_id = 31;
              if($result = mysql_query($query)){
              echo "<p>".mysql_num_rows($result)." fiches</p>";
              while($row=mysql_fetch_object($result)){
              $compteur++;
              $left += 2;
              $right = $left+1;
              $asset_id += 1;
              echo "<p>$compteur : ".htmlentities($row->title);

              $query1 = "INSERT INTO `jos17_content`(`id`, `asset_id`, `title`, `alias`, `title_alias`, `introtext`, `fulltext`, `state`, `sectionid`, `mask`, `catid`, `created`, `created_by`, `created_by_alias`, `modified`, `modified_by`, `checked_out`, `checked_out_time`, `publish_up`, `publish_down`, `images`, `urls`, `attribs`, `version`, `parentid`, `ordering`, `metakey`, `metadesc`, `access`, `hits`, `metadata`, `featured`, `language`, `xreference`) VALUES ('0', ";
              $query1 .= "'$asset_id', '".addslashes($row->title)."', '".$row->alias."', '".$row->title_alias."', '".addslashes($row->introtext)."', ";
              $query1 .= "'".addslashes($row->fulltext)."', '1', '0', '0', '2', '".$row->created."', '42', '', ";
              $query1 .= "'".$row->modified."', '0', '0', '0000-00-00 00:00:00', '".$row->publish_up."', '".$row->publish_down."', '', '', ";
              $query1 .= "'{\"show_title\":\"\",\"link_titles\":\"\",\"show _intro\":\"\",\"show_category\":\"\",\"link_catego ry\":\"\",\"show_parent_category\":\"\",\"link_par ent_category\":\"\",\"show_author\":\"\",\"link_au thor\":\"\",\"show_create_date\":\"\",\"show_modif y_date\":\"\",\"show_publish_date\":\"\",\"show_it em_navigation\":\"\",\"show_icons\":\"\",\"show_pr int_icon\":\"\",\"show_email_icon\":\"\",\"show_vo te\":\"\",\"show_hits\":\"\",\"show_noauth\":\"\", \"alternative_readmore\":\"\",\"article_layout\":\ "\"}', ";
              $query1 .= "'1', '0', '0', '".addslashes($row->metakey)."', '".addslashes($row->metadesc)."', '1', '".$row->hits."', ";
              $query1 .= "'{\"robots\":\"\",\"author\":\"\",\"rights\":\"\" ,\"xreference\":\"\"}', ";
              $query1 .= "'0', '*', ''";
              $query1 .= ")";

              echo "<br />$query1";
              echo "<br />";
              if( mysql_query($query1) ){
              echo "<div class='ok'>OK...</div>";
              }else{

              echo "<div class='alerte'>".mysql_error()."</div>";
              }

              $query2 = "INSERT INTO `jos17_assets`(`id`, `parent_id`, `lft`, `rgt`, `level`, `name`, `title`, `rules`) VALUES (";
              $query2 .= "'0', '27', '$left', '$right', '3', 'com_content.article.".$compteur."', '".addslashes($row->title)."', ";
              $query2 .= "'{\"core.delete\":[],\"core.edit\":[],\"core.edit.state\":[]}'";
              $query2 .= ")";

              echo "<br />$query2";
              echo "<br />";
              if( mysql_query($query2) ){
              echo "<div class='ok'>OK...</div>";
              }else{

              echo "<div class='alerte'>".mysql_error()."</div>";
              }
              echo "</p>\n";


              }
              }else{
              echo mysql_error();
              }

              ?>
              </body>
              </html>
              Christophe
              http://www.webcrea.fr

              Commentaire


              • #8
                Re : Insérer des pages via la base de données

                je me rends compte en publiant que la query2 devrait être dans le test ok query1... et pas à la suite
                Christophe
                http://www.webcrea.fr

                Commentaire


                • #9
                  Re : Insérer des pages via la base de données

                  Super! merci...

                  Commentaire

                  Annonce

                  Réduire
                  Aucune annonce pour le moment.

                  Partenaire de l'association

                  Réduire

                  Hébergeur Web PlanetHoster
                  Travaille ...
                  X