CMS_LINK aus con_content in anderem modul auslesen

Gesperrt
Vetinari
Beiträge: 136
Registriert: Sa 31. Mär 2007, 19:11
Wohnort: Fulda
Kontaktdaten:

CMS_LINK aus con_content in anderem modul auslesen

Beitrag von Vetinari »

hallo,

habe in meiner terminverwaltung (modul: termin) zwei links (CMS_LINK1 und CMS_LINK2) zu internen artikeln gespeichert.
ich möchte jetzt von einem anderen modul (terminliste) auf diese links zugreifen.

momentan lese ich nur die variablen des idtype=3 aus:

Code: Alles auswählen

    if ($db->num_rows()> 0) // select entries and write them into an array
        { 
        $termin = array(); 
        $db->next_record(); 
        for ($i = 0; $i<$db->num_rows(); $i++) 
            { 
            if ($db->f("idtype") == 3)
            { 
                $typeid = $db->f("typeid"); 
                $termin[$typeid] = $db->f("value"); 
            }               
            $db->next_record(); 
            } 
        } 
welche zeilen muss ich im o.g. code einfügen, damit ich die werte für CMS_LINK 1+2 ebenfalls erhalte?

danke und gruss, V.
Si non confectus, non reficiat. (Motto der Vetinaris)
Solange etwas nicht kaputt ist, repariere es nicht.
oder:
Lass die Dinge einfach laufen, die meisten Probleme erledigen sich eh von selbst.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

Code: Alles auswählen

        $db->next_record(); 
        for ($i = 0; $i<$db->num_rows(); $i++) 
            { 
            if ($db->f("idtype") == 3) 
            { 
                $typeid = $db->f("typeid"); 
                $termin[$typeid] = $db->f("value"); 
            }                
            $db->next_record(); 
            } 
        } 
würd ich etwas anders schreiben
das zweite $db->next_record(); ergibt für mich nicht wirklich sinn...

Code: Alles auswählen

        while ($db->next_record()) 

            if ($db->f("idtype") == 3) 
            { 
                $termin[$db->f("typeid")] = $db->f("value"); 
            }                
        } 
an sich kann man jetzt einfach das == 3 auf == 6 ändern... siehe con_type
*** make your own tools (wishlist :: thx)
knb
Beiträge: 224
Registriert: Fr 9. Sep 2005, 14:03
Wohnort: Potsdam
Kontaktdaten:

Beitrag von knb »

Per API scheint das so zu funktionieren wie in diesem Code beschrieben:


http://www.contenido.org/forum/viewtopi ... torder=asc

Zufällig habe ich gestern versucht dies nachzuvollziehen (wenn auch nur im Kopf :D ) . Falls der Autor recht hat, dann muss man anscheinend sich die Container-ID des fremden Moduls merken und kann dann die CMS* Typen des fremden Moduls zugreifen.

Vielleicht gibt es aber noch einen einfacheren Weg. Oder einen besseren Weg. Die Container-ID fest im Code zu verdrahten ist eine potentielle Quelle späterer Irritationen....
my 0.02 $
Gruss,
Knut
Vetinari
Beiträge: 136
Registriert: Sa 31. Mär 2007, 19:11
Wohnort: Fulda
Kontaktdaten:

Beitrag von Vetinari »

danke, werds mal testen ;-)

gruss, V.
Si non confectus, non reficiat. (Motto der Vetinaris)
Solange etwas nicht kaputt ist, repariere es nicht.
oder:
Lass die Dinge einfach laufen, die meisten Probleme erledigen sich eh von selbst.
Vetinari
Beiträge: 136
Registriert: Sa 31. Mär 2007, 19:11
Wohnort: Fulda
Kontaktdaten:

Beitrag von Vetinari »

das ganze ist jetzt doch etwas komplizierter, da ich ein mehrdimensionales array habe. jeder termin hat 14 werte zzgl. die 2 links (CMS_LINK1 und CMS_LINK2) und der zähler für alle termine ist $zaehler.

zum einlesen der daten habe ich jetzt folgendes ge-codet:

Code: Alles auswählen

$zaehler = 0;
$termin = array(array()); 
        while ($count < $db->num_rows()) 
        { 
            $db->next_record(); 
            if ($db->f("idart") > $termin["idart"][$zaehler]) 
            { 
                $zaehler++; 
            }  
            
            $linktyp = $db->f("idtype");
                
            switch ($db->f("typeid")) 
            { 
                case 0:
                    if ($linktyp == '3')
                    { $termin[0][$zaehler] = $db->f("value"); 
                      $termin["idart"][$zaehler] = $db->f("idart"); }
                    break; 
                case 1: 
                    if ($linktyp == '3') 
                    { $termin[1][$zaehler] = $db->f("value"); }
                    break; 
                case 2: 
                    if ($linktyp == '3') 
                    { $termin[2][$zaehler] = $db->f("value"); }
                    break; 
                case 3: 
                    if ($linktyp == '3') 
                    { $termin[3][$zaehler] = $db->f("value"); }
                    break; 
                case 4: 
                    if ($linktyp == '3') 
                    { $termin[4][$zaehler] = $db->f("value"); }
                    break; 
                case 5:
                    if ($linktyp == '3')
                    { $termin[5][$zaehler] = $db->f("value"); }
                    break;                     
                case 6: 
                    if ($linktyp == '3')
                    { $termin[6][$zaehler] = $db->f("value"); }
                    break; 
                case 7: 
                    if ($linktyp == '3')
                    { $termin[7][$zaehler] = $db->f("value"); }
                    break;                      
                case 8: 
                    if ($linktyp == '3')
                    { $termin[8][$zaehler] = $db->f("value"); }
                    break;     
                case 9: 
                    if ($linktyp == '3') 
                    { $termin[9][$zaehler] = $db->f("value"); }
                    break;  
                case 10: 
                    if ($linktyp == '3')
                    { $termin[10][$zaehler] = $db->f("value");  }
                    break; 
                case 11: 
                    if ($linktyp == '3')
                    { $termin[11][$zaehler] = $db->f("value"); }
                    break;                      
                case 12: 
                    if ($linktyp == '3')
                    { $termin[12][$zaehler] = $db->f("value"); }
                    break;     
                case 13: 
                    if ($linktyp == '3') 
                    { $termin[13][$zaehler] = $db->f("value"); }
                    break;    
                case 14: 
                    if ($linktyp == '3') 
                    { $termin[14][$zaehler] = $db->f("value"); }
                    break;   
                case 15: 
                    if ($linktyp == '6') 
                    { $link[1][$zaehler] = $db->f("value"); }
                    break;    
                case 16: 
                    if ($linktyp == '6') 
                    { $link[2][$zaehler] = $db->f("value"); }
                    break;                                                                            
            } 
        $count++; 
        }
leider sind beim auslesen die variablen $link[1][$zaehler] und $link[2][$zaehler] jedoch immer leer.

gruss, V.
Si non confectus, non reficiat. (Motto der Vetinaris)
Solange etwas nicht kaputt ist, repariere es nicht.
oder:
Lass die Dinge einfach laufen, die meisten Probleme erledigen sich eh von selbst.
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Wenn CMS_LINK1 CMS_LINK[1] bedeutet, dann ist dafür natürlich typeid = 1 bzw. 2 (nicht 15 oder 16).

Mache es Dir doch einfach (wenn möglich): Grenze in der Abfrage auf typeid bis 15 (oder so) und idtype auf 3 oder 6 ein. Sortiere nach idart, idtype und typeid (nur, damit man es besser prüfen kann).

Dann speichere die Daten im Array
$data[$idart][$db->f("idtype")][$db->f("typeid")] = $db->f("value");

Damit solltest Du alle Daten verfügbar haben.

Der Link1 steht dann z.B. in $data[123][6][1].

Dann entfällt der Zähler und die Switch-Anweisung...

Anzahl ist count($data).

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
Vetinari
Beiträge: 136
Registriert: Sa 31. Mär 2007, 19:11
Wohnort: Fulda
Kontaktdaten:

Beitrag von Vetinari »

danke!

ja, CMS_LINK[1] ...
so etwas ähnliches hatte ich auch vor, aber da ich in sachen mehrdimensionale arrays noch nicht so code-fest bin (und auch contenido modul-entwicklung), habe ich mir die zähne an der sache ausgebissen und am ende auf einen codeschnipsel aus der terminliste von schlaucher zurückgegriffen.
kam mir auch etwas umständlich vor, aber zu 90% funktionierte es eben ;-)

kannst du mir beim code noch etwas mehr auf die sprünge helfen bzw. mir einen link hier im forum (o.ä.) schicken wo ich was passendes finde?

danke und gruss,
V.

p.s.: typeid 1 und 2 sind bei mir ja bereits vergeben. ich dachte immer, dass das kein problem ist, da ja die idtype für den link eine andere ist. siehe die bemerkung von emergence weiter oben ...
Si non confectus, non reficiat. (Motto der Vetinaris)
Solange etwas nicht kaputt ist, repariere es nicht.
oder:
Lass die Dinge einfach laufen, die meisten Probleme erledigen sich eh von selbst.
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

kannst du mir beim code noch etwas mehr auf die sprünge helfen bzw. mir einen link hier im forum (o.ä.) schicken wo ich was passendes finde?
Du meinst für den letzten von Dir geposteten Code und meine Antwort mit dem Array?

Statt

Code: Alles auswählen

$zaehler = 0; 
$termin = array(array()); 
        while ($count < $db->num_rows()) 
        { 
            $db->next_record(); 
            if ($db->f("idart") > $termin["idart"][$zaehler]) { 
                $zaehler++; 
            }  
            
            $linktyp = $db->f("idtype"); 
                
            switch ($db->f("typeid")) 
            { 
...
            } 
        $count++; 
        } 
nur

Code: Alles auswählen

$aData = array(array()); 
        while ($db->next_record()) 
        { 
            $aData[$idart][$db->f("idtype")][$db->f("typeid")] = $db->f("value");
        } 
Thats it.
p.s.: typeid 1 und 2 sind bei mir ja bereits vergeben. ich dachte immer, dass das kein problem ist, da ja die idtype für den link eine andere ist. siehe die bemerkung von emergence weiter oben ...
Habe ich nicht ganz verstanden (ob das noch eine Frage ist). Der Content-Type CMS_... bestimmt die idtype (siehe Tabelle _types). Die typeid ist die Index-Zahl, die im Modul verwendet wurde (also z.B. 2 bei CMS_HTML[2]). Man kann daher identische typeids bei unterschiedlichen idtypes und umgekehrt haben. Nur die Kombination muss pro Artikel eindeutig sein (daher kann man z.B. auch nicht mehrere CMS_HTML[2] auf einer Seite verwenden bzw. man kann schon, aber die zeigen alle den gleichen Inhalt).

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
Vetinari
Beiträge: 136
Registriert: Sa 31. Mär 2007, 19:11
Wohnort: Fulda
Kontaktdaten:

Beitrag von Vetinari »

ja, genau das meinte ich!

vielen dank, V.
Si non confectus, non reficiat. (Motto der Vetinaris)
Solange etwas nicht kaputt ist, repariere es nicht.
oder:
Lass die Dinge einfach laufen, die meisten Probleme erledigen sich eh von selbst.
Gesperrt