SQL in GoogleSitemap-Modul

MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

SQL in GoogleSitemap-Modul

Beitrag von MyAccount »

Hallo liebe Community,

was haltet ihr von neue Untergruppen im Forum? Ich halte z.B. eine Untergruppe SQL sehr sinnvoll. Wo man sich über die Vorzüge des einen oder anderen Querys austauschen kann.

Hätte da z.B. folgende Query zur Diskussion. Hab mir das GoogleSitemaps-Modul angeschaut und war mit der enthaltenden Query unzufrieden. Diese Query soll alle Artikel eines Mandanten in einer Sprache auflisten, die online und public sind.

Code: Alles auswählen

SELECT 
  `D`.`idart`
FROM
  `con_cat_tree` `A`,
  `con_cat` `B`,
  `con_cat_lang` `C`,
  `con_cat_art` `E`
  INNER JOIN `con_art_lang` `D` ON (`E`.`idart` = `D`.`idart`)
WHERE
  (`A`.`idcat` = `B`.`idcat`) AND 
  (`B`.`idcat` = `C`.`idcat`) AND 
  (`C`.`idcat` = `E`.`idcat`) AND 
  (`B`.`idclient` = '3') AND 
  (`C`.`idlang` = '3') AND   (`D`.`idlang` = '3') AND 
  (`C`.`visible` = '1') AND 
  (`E`.`idcatart` IS NOT NULL) AND 
  (`C`.`public` = '1')
Was meint ihr? Wäre natürlich schon, wenn hier auch irgendwie so sortiert werden könnte, dass die Artikel alle nach den jeweiligen Kategorien kommen. Aber da ist mir nix zu eingefallen, was ich mit SQL hinbekommen würde. :-)

Gruß MyAccount

PS:Warum gibt es eigentlich die Untergruppen "Erweiterungen" und "Contenido API" nicht mehr?
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Re: Weitere Untergruppen im Forum? SQL

Beitrag von emergence »

MyAccount hat geschrieben:Warum gibt es eigentlich die Untergruppen "Erweiterungen" und "Contenido API" nicht mehr?
ad. erweiterungen
hmm... besteht denn die notwendigkeit das es benötigt wird ?

ad. contenido api
für solche sachen ist eigentlich Contenido Development vorgesehen...
das forum bei 4.4.x stable Contenido-API Howto wurde ja so gut wie gar nicht seitens community genutzt... (4 beiträge wobei eigentlich nur einer was mit der api selbst zu tun hat...)

ad. sql queries
könnte man ja einrichten in Versionsunabhängige Foren
(die meisten sachen sind dann aber wieder so spezifisch, das es wieder nicht versionsunabhängig wäre...)

anmerkung
ich würd mal sagen, wenn sich jemand findet der diese beiden foren auch aktiv betreuen möchte, macht es sinn... bleibt aber vermutlich an den jetzigen mods hängen..
*** make your own tools (wishlist :: thx)
MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Re: Weitere Untergruppen im Forum? SQL

Beitrag von MyAccount »

emergence hat geschrieben: ad. erweiterungen
hmm... besteht denn die notwendigkeit das es benötigt wird ?
Hhhmmm :D Da sollte man vielleicht vorher genau definieren, was Erweiterungen sind, und was nicht!
emergence hat geschrieben: ad. contenido api
für solche sachen ist eigentlich Contenido Development vorgesehen...
das forum bei 4.4.x stable Contenido-API Howto wurde ja so gut wie gar nicht seitens community genutzt... (4 beiträge wobei eigentlich nur einer was mit der api selbst zu tun hat...)
OK, da gebe ich Dir Recht. API ist was anderes. Woran ich dachte, ist eine Gruppe zu den enthaltenen Backend- und Frontend-Funktionen und -Klassen, wie z.B. ArticleCollection.
emergence hat geschrieben: ad. sql queries
könnte man ja einrichten in Versionsunabhängige Foren
(die meisten sachen sind dann aber wieder so spezifisch, das es wieder nicht versionsunabhängig wäre...)
Ich würde das eher versionsabhängig machen. Alleine aus der Tatsache heraus, dass die 4.6* einige Tabellen mehr hat. :D

emergence hat geschrieben: anmerkung
ich würd mal sagen, wenn sich jemand findet der diese beiden foren auch aktiv betreuen möchte, macht es sinn... bleibt aber vermutlich an den jetzigen mods hängen..
:D Für den SQL-Kram würde ich das machen. Hast Du Erfahrungswerte, wann und wie oft man als Mod damit zu tun hat?! Eine Stunde alle zwei Tage? Jeden Tage zwei Stunden? Rund um die Uhr. LACH
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Erweiterungen gibt es - es wurde jedoch nur für V4.4 eingerichtet und mangels Interesse nicht bei V4.6 übernommen.

Contenido API war eigentlich mal so gedacht, dass die Entwickler jeweils einzelne APIs vorstellen, informieren und Rückmeldung von der Community erhalten. Mangels Zeit wurde bisher nur eine API vorgestellt (und die bedarf auch noch der Überarbeitung ... :wink: ). Tatsächlich fällt das IMHO alles in die Kategorie Dokumentation, zu der einfach die Zeit fehlt... ich selbst komme ja nicht dazu, meinen Contenido-FAQ-Account auszureizen...

Ich war gerade am Überlegen, ob man die Contenido-API nicht in den versionsunabhängigen Bereich übernimmt und in "Dokumentation (z.B. API)" umbenennt - das erscheint mir aber doch nicht so sinnvoll, da sie tatsächlich versionsabhängig ist.

Zu SQL-Bereich: Mmmh, das ist ja doch Modul-, Versions- oder Bug-abhängig, denke ich (und da sucht man es auch...). Und bereits den Ausgangsbeitrag würde ich - bezogen auf SQL - nach Module verschieben und/oder mit "neues Modul" oder "zu bestehendem Thread ergänzen" kommentieren.
Was meint ihr? Wäre natürlich schon, wenn hier auch irgendwie so sortiert werden könnte, dass die Artikel alle nach den jeweiligen Kategorien kommen. Aber da ist mir nix zu eingefallen, was ich mit SQL hinbekommen würde.
Was meinst Du? Dass die Kategorie mit ausgegeben oder nach ihr sortiert wird?

Gruß
HerrB
Zuletzt geändert von HerrB am Mo 7. Aug 2006, 11:41, insgesamt 1-mal geändert.
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount »

OK, man könnte den SQL-Kram in der Tat einfach in Module schieben. Gibt ja immer noch die Möglichkeit SQL im Betreff zu schrieben, was?! :-)
HerrB hat geschrieben: Was meinst Du? Dass die Kategorie mit ausgegeben oder nach ihr sortiert wird?
Ne, ich meine hier den Baum. Ich denke mal es ist der idtree. Eine Sortierung nach idcat macht keinen Sinn, da ich die Kategorien ja nach deren Erstellung umhängen könnte.
  • idcat 1
    idcat 2
    idcat 3
    ----idcat 4
    ----idcat 5
    ------idart 1
    ------idart 2
Wenn ich jetzt die Kategorie idcat 4 als Unterordner von idcat 2 verschiebe, hilft mir die Sortierung nach idcat ja auch nichts mehr.
  • idcat 1
    idcat 2
    ----idcat 4
    idcat 3
    ----idcat 5
    ------idart 1
    ------idart 2
Ich denke da z.B. an so Module wie das Sitemap-Modul. Für die Google Sitemap wär's wohl egal. Zumindest sehe ich bei der Google Sitemap Doc. nichts, was die Links irgendwie in Relation zueinander setzt.
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

du hast recht. es ist die tabelle con_cat_tree (oder so ähnlich), die man mit den kategorien verknüpft.
MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount »

stese hat geschrieben:du hast recht. es ist die tabelle con_cat_tree (oder so ähnlich), die man mit den kategorien verknüpft.
Yip. Würdest Du es mit einem query versuchen? Oder ist es besser mit zwei querys zu machen?

Gruß My Account
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

was willst du genau machen? nur den baum ausgeben? das macht man in einer query - wenn du auch die artikel dazu haben willst, musst du diese in einer seperaten query der jeweilig durchlaufenen idcat machen. es kann sein, dass das vll. mit mysql5 und subselects auch möglich ist - habe ich allerdings noch nie verwendet, da ich keinen server mit mysql 5 habe
MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount »

Es ging nur um den Baum. Also nur die Kategorien. Ich hab mich nur über die Sitemap aus dem Beispiel-Mandanten gewundert. Da geht das wohl mit mehreren querys in der Funktion.

Mit einer query würde das dann so aussehen:

Code: Alles auswählen

SELECT 
  `C`.`idcatlang`,
  `C`.`public`,
  `C`.`startidartlang`,
  `A`.`idcat`,
  `C`.`name`,
  `A`.`level`
FROM
  `con_cat_lang` `C`,
  `con_cat_tree` `A`,
  `con_cat_art` `E`,
  `con_cat` `B`
  INNER JOIN `con_art_lang` `D` ON (`E`.`idart` = `D`.`idart`)
WHERE
  (`A`.`idcat` = `B`.`idcat`) AND 
  (`B`.`idcat` = `C`.`idcat`) AND 
  (`C`.`idcat` = `E`.`idcat`) AND 
  (`B`.`idclient` = '3') AND 
  (`C`.`idlang` = '3') AND 
  (`D`.`idlang` = '3') AND 
  (`C`.`visible` = '1') AND 
  (`E`.`idcatart` IS NOT NULL) AND 
  (`C`.`public` = '1')
ORDER BY
  `A`.`idtree`
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

kürzer so, denn die article brauchst du meines wissens gar nicht, da startidartlang uralt ist und nicht mehr genutzt wird:

Code: Alles auswählen

// get all categories sort by idtree
  $sql = "SELECT ct.idcat, ct.level, cl.name, cl.idcatlang
      	     FROM " . $cfg['tab']['cat_tree'] . " AS ct,
                " . $cfg['tab']['cat'] . " AS c,
                " . $cfg['tab']['cat_lang'] . " AS cl
             WHERE ct.idcat   = c.idcat AND
                 c.idcat    = cl.idcat AND
      	         cl.idlang  = '" . $lang . "' AND
                 c.idclient = '" . $client . "' AND
                 cl.visible  = '1' AND
                 cl.public  = '1'
             ORDER BY
                 ct.idtree";
  $db->query($sql);
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

kürzer so, denn die article brauchst du meines wissens gar nicht, da startidartlang uralt ist und nicht mehr genutzt wird:
Knapp daneben:
- is_start aus _cat_art ist V4.4.x bzw. start_compatible = true ist alt.
- startidartlang aus _cat_lang ist V4.6.x bzw. start_compatible = false und topaktuell.

Ob man es braucht, ist aber tatsächlich die Frage...

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

oder sorum ;) trotzdem braucht man die art_lang nicht hehe
MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount »

Aha, ich brauche also art_lang nicht?! Ihr seid mit ein paar Nasen. OK, Spaß beiseite. Ich bin die ganze Zeit am Google-Sitemap-Teil dran. :-) Für das Sitemap-Modul reicht tatsächlich die query von stese.

Trotzdem ist die Sitemap aus dem Demo-Mandanten eine Demo für schlechten Stil, oder was?!

Aber für das Google-Teil geht's meiner Meinung nicht ohne 'nen Join(t). LACH.... Gut das ich das Zeugs nie angefasst habe... :wink:

Heute hab ich aber einen Clown gefrühstückt.
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Trotzdem ist die Sitemap aus dem Demo-Mandanten eine Demo für schlechten Stil, oder was?!
Ein Beispiel ist ein Beispiel - und der Beispiel-Mandant ist ein ... genau.

Machs hübscher und wir bauen es ein... :wink:

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount »

HerrB hat geschrieben:Machs hübscher und wir bauen es ein... :wink:
Oh ja, bitte. Hier schon einmal der Input-Teil. Den Output-Teil nehme ich noch genauer unter die Lupe. Denke, man könnte auf den komplizierten Aufbau der function sitemap() verzichten, und alles in einem Query erfassen, in einen Array schieben, und dann in Schleifen die Templates machen.

Die Änderungen im Input-Teil dürften Dir ja bekannt sein. :-)

Code: Alles auswählen

/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname   :     mySitemap
* Author(s)   :     http://contenido.org/forum/ myAccount
* Copyright   :     http://contenido.org/forum/
* Created     :     01.08.2006
* Based on    :     Sitemap
                    29-12-2003 by Sascha Benkart
                    14-01-2003 by Nik Wyss
                    15-08-2002 Jan Lengowski, Jose Rodriguz
************************************************/

/***********************************************
* Includes
************************************************/
cInclude("classes", "contenido/class.client.php");


/***********************************************
* Settings
************************************************/
$myBooDebug = false;
unset($myArrSet);
$myArrSet = array();
$myArrSet["selectedCategory"] = "CMS_VALUE[0]";


/***********************************************
* Check Settings
************************************************/
if (!isset($myArrSet["selectedCategory"]) || empty($myArrSet["selectedCategory"])) {
  $cApiClient = new cApiClient($client);
  $myArrSet["selectedCategory"] = $cApiClient->getProperty('mySitemap', 'idCat');
}

/***********************************************
* Text
************************************************/
$myArrTxt["ChooseCategory"] = mi18n("Choose Category:");
$myArrTxt["None"]           = mi18n("----- none -----");
$myArrTxt["Border"]         = mi18n("|");
$myArrTxt["Tabulator"]      = mi18n("--");
$myArrTxt["Arrow"]          = mi18n("->");
$myArrTxt["Spacer"]         = "";


/***********************************************
* Template Configuration
************************************************/
echo "<table>\n";
echo "<tr>\n";

echo "<td>\n";
echo "<label>".$myArrTxt["ChooseCategory"]."</label>\n";
echo "</td>\n";

echo "<td>\n";
echo "  <select name="CMS_VAR[0]">\n";

            if(!$myArrSet["selectedCategory"] && empty($myArrSet["selectedCategory"])){

              echo "  <option value="0">".$myArrTxt["None"]."</option>";

            } else {

              echo "  <option selected="selected" value="0">".$myArrTxt["None"]."</option>";

            }

            $sql = "SELECT 
                            A.idcat, 
                            A.level, 
                            C.name 
                    FROM 
                            ".$cfg["tab"]["cat_tree"]." AS A, 
                            ".$cfg["tab"]["cat"]." AS B,  
                            ".$cfg["tab"]["cat_lang"]." AS C 
                    WHERE 
                            A.idcat=B.idcat
                            AND 
                            B.idcat=C.idcat 
                            AND 
                            C.idlang='".$lang."' 
                            AND 
                            B.idclient='".$client."'
                            AND 
                            C.visible='1'
                    ORDER BY 
                            A.idtree";

            $db->query($sql);

            while ($db->next_record()) {

              $myArrTxt["Spacer"] = $myArrTxt["Border"];

              $levels = $db->f("level");

              for ($i = 0; $i < $levels; $i ++) {

                $myArrTxt["Spacer"] = $myArrTxt["Spacer"].$myArrTxt["Tabulator"];

              }
              
              $myArrTxt["Spacer"] .=$myArrTxt["Arrow"];              

              if ($myArrSet["selectedCategory"] == $db->f("idcat")) {

                echo "<option selected="selected" value="". $db->f("idcat") ."">". $myArrTxt["Spacer"] . $db->f("name") ."</option>";
                echo "selected=selected".$myArrSet["selectedCategory"]."<br>\n";
                echo $db->f("idcat");

              } else {

                echo "<option value="". $db->f("idcat") ."">". $myArrTxt["Spacer"] . $db->f("name") ."</option>";
                echo "selected!=selected".$myArrSet["selectedCategory"]."<br>\n";
                echo $db->f("idcat");

              }

            }

echo "      </select>";
echo "</td>\n";

echo "</tr>\n";
echo "</table>\n";
Ist doch hübscher, oder?!

Gruß myAccount
Gesperrt