interner redirect + globale variable

mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

interner redirect + globale variable

Beitrag von mvf »

timo bittet immer wieder darum, bzw fordert dazu auf, für neue fragen auch neue threads zu eröffnen, also will ich dies tun ;)

ich hatte bereits im zusammenhang mit
http://contenido.org/forum/viewtopic.ph ... highlight=
danach gefragt.

ziel, ich möchte gerne weiterleitungen setzen, die z.b. wie folgt aussehen sollen:

front_content.php?idcat=13&naviswitch=X

wobei naviswitch der globalen variable $naviswitch ebtsprechen soll.

die weiterleitung in der artikel konfiguration ist ja soweit ich es verstehe eigentlich nur für externe redirects ausgelegt.

kann mir jemand sagen wie man eine interne weiterleitung mit einer zusätlichen variable korrekt implementiert?
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

hm normal geht das eigentlich nicht. wäre ja auch ein ziemliches sicherheitsrisiko, wenn das ein, sagen wir mal Redakteur, einfach eine interne PHP variable anhängen könnte)

ich glaube das müsstest du generell in einem modul lösen, der dir dann entsprechend die url zusammenstellt und weiterleitet. also verwendest du nicht die interne contenido artikeleigenschafts weiterleitung sondern weist deinem artikel ein spezielles template zu in dem ein modul an oberster stelle im layout (noch bevor irgend eine ausgabe in form von leerzeichen oder html tags kommt) weitergeleitet wird.
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf »

stese, danke!

zum einen hatte ich schon wriklich die befürchtung, dass niemand meine posts liest, zum anderen bin ich genau da am frickeln, redirect modul.

das ding bei mir ist ja, dass ich eigentlich wie in dem thread zur navigation beschrieben immer die $naviswitch weitergeben will.

in der hauptnavi habe ich das im modul lösen können, wenn es kein redirect ist ;)

kannst du mirmit meinen bescheidenen php kenntnissen noch ein wenig auf die sprünge helfen? nein ich erwarte nicht ein fertiges modul :? aber vielceiht noch ein paar hinweise wie das modul ungefähr aufzubauen wäre :?

besten dank vorab
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf »

noch eine frage dazu

im output der hauptnavigation erscheint folgender code:

Code: Alles auswählen

        while ($db->next_record()) {

                /* Check for external redirects... */
                $sql = "SELECT
                            a.external_redirect AS ext,
                            a.idartlang AS idartlang
                        FROM
                            ".$cfg["tab"]["art_lang"]." AS a,
                            ".$cfg["tab"]["cat_art"]." AS b,
                            ".$cfg["tab"]["cat"]." AS c
                        WHERE
                            b.idcat     = '".$db->f("idcat")."' AND
                            c.idclient  = '".$client."' AND
                            c.idcat     = b.idcat AND
                            a.idart     = b.idart AND
                            a.idlang    = '".$lang."'";

                $db2->query($sql);
				$flag = false;
                while ($db2->next_record() && !$flag) {
	                if (isStartArticle($db2->f("idartlang"), $db->f("idcat"), $lang))
	                {
						$flag = true;
	                    $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
	                    
	                    $tmp_nav[$db->f("idcat")] = array("idcat"   => $db->f("idcat"),
	                                                      "name"    => $db->f("name"),
	   	                        	                      "public" => $db->f("public"),
		            					            	  "idcatlang" => $db->f("idcatlang"),
	                                                      "target"  => $target);
	                }
				}
        }
kann mann dort nicht einfach die $naviswitch mitgeben?
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

edit:
ich kenne das modul nicht (ich nutze keine standardmodule von contenido weil die mir nicht flexibel genug sind)

aber theoretisch müsste das funktionieren:

Code: Alles auswählen

while ($db->next_record()) {

                /* Check for external redirects... */
                $sql = "SELECT
                            a.external_redirect AS ext,
                            a.idartlang AS idartlang
                        FROM
                            ".$cfg["tab"]["art_lang"]." AS a,
                            ".$cfg["tab"]["cat_art"]." AS b,
                            ".$cfg["tab"]["cat"]." AS c
                        WHERE
                            b.idcat     = '".$db->f("idcat")."' AND
                            c.idclient  = '".$client."' AND
                            c.idcat     = b.idcat AND
                            a.idart     = b.idart AND
                            a.idlang    = '".$lang."'";

                $db2->query($sql);
            $flag = false;
            global $naviswitch;

                while ($db2->next_record() && !$flag) {
                   if (isStartArticle($db2->f("idartlang"), $db->f("idcat"), $lang))
                   {
                  $flag = true;
                       $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
                       
                       $tmp_nav[$db->f("idcat")] = array("idcat"   => $db->f("idcat"),
                                                         "name"    => $db->f("name"),
                                                          "public" => $db->f("public"),
                                                  "idcatlang" => $db->f("idcatlang"),
                                                         "target"  => $target,
                                                         "naviswitch"  => $naviswitch);
                   }
            }
        }
nachtrag:
wie definierst du eigentlich weiterleitung? wenn du es so definierst wie ich, dass du die Einstellung "Weiterleitung" in den Artikeleigenschaften meinst, wird die das script oben glaube ich nicht helfen
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf »

wie definierst du eigentlich weiterleitung? wenn du es so definierst wie ich, dass du die Einstellung "Weiterleitung" in den Artikeleigenschaften meinst, wird die das script oben glaube ich nicht helfen
so ist es :(

vom prinzip her wie gesagt möchte ich einfach die variable $naviswitch global immer an die url anhängen. wie im thread zur aufklappbaren navigation beschrieben, sieht es momentan wie folgt aus:

standard layout hat macht eine abrfage der $naviswitch um zu entscheiden welche katbox angezeit werden soll.

hier nochmal der code:

Code: Alles auswählen

<?php
if (!isset($naviswitch)) {        
        $sess->register("naviswitch");
        } else {
                $naviswitch = $_GET["naviswitch"];
               }

if ($naviswitch == 0 ) {
   ?>     
<div align="left" style="float:left;">
    <div class="ml1shdwce">
        <div class="ml1shdwtr">
            <div class="ml1shdwbl">
                 <div class="ml1wrap">
                    <div class="ml1headl">
                        <div align="left" style="float:left;"><container id="20" name="Kategoriebox Headline"></container></div>
                        <div align="right" style="float:right; padding-right:8px;">
                            <form action="front_content.php" method="GET">
                            <input type="hidden" name="idcat" value="<?php echo $idcat; ?>">
                            <input type="hidden" name="naviswitch" value="1">
                            <input type="image" src="upload/backgrounds/arrow_up.gif" title="Navigation einklappen">
                            </form>
                        </div>
                    </div>            
                    <div class="ml1content1"><container id="21" name="Hauptnavigation" default="Hauptnavigation"></container></div>
                </div>
            </div>
        </div>
    </div>
</div>
  

<?php }
  else {
 ?>
<div align="left" style="float:left;">
    <div class="ml1shdwce">
        <div class="ml1shdwtr">
            <div class="ml1shdwbl">
                 <div class="ml1wrap">
                    <div class="ml1headl">
                        <div align="left" style="float:left;"><container id="22" name="Kategoriebox Headline"></container></div>
                        <div align="right" style="float:right; padding-right:8px; padding-top:1px;">
                            <form action="front_content.php" method="GET">
                            <input type="hidden" name="idcat" value="<?php echo $idcat; ?>">
                            <input type="hidden" name="naviswitch" value="0">
                            <input type="image" src="upload/backgrounds/arrow_down.gif" title="Navigation aufklappen">
                            </form>
                        </div>
                    </div>            
                    <div class="ml1content"><container id="23" name="Hauptnavigation" default="Hauptnavigation"></container></div>
                </div>
            </div>
        </div>
    </div>
</div>
<?php
};
?>
dann habe ich im modul hauptnavigation in der schleife wo die ebenen templates generiert werden noch die $naviswitch angehangen.

Code: Alles auswählen

		            $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'].'&naviswitch='.$naviswitch));
was ich also möchte ist sozusagen einmal die naviswitch als default = 0 also langes menü aufgeklpatt, definieren. dann soll diese immer und überallmitgeschleift werden und eben nur über den klick auf das icon auf- bzw. zugeklappt werden.

das funktioniert momentan aber nur wenn ich die session neu starte und eben innerhalb eines kategoriebaumes, wenn ich wechsle dann geht mir die info flöten und vor allem funzt es dann auch nichtmehr.

die redirects sind dann nur ein folgeproblem.

zum reproduzieren:

http://dev1.elflein-kosmetik.de/cont46d ... p?idcat=13

dann über den pfeil die navi auf und zuklappen, die ersten drei ebene haben das template eingebunden

unser Portfolio | Anwendungen | Classics

wenn man nur dort hin und her springt und die navi zwischedurch auf un zu klappt passt es!

allerding einmal auf einen link der nicht in der katbox ist, und schon geht die $naviswitch flöten und vor allem funktionirt es danach auch im studio mit den 3 ebenen nicht mehr bis man die session killt.

was mache ich falsch ???
Zuletzt geändert von mvf am Mo 21. Nov 2005, 20:34, insgesamt 1-mal geändert.
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf »

noch eine anmerkung

Code: Alles auswählen

headernavi main
headernavi rechts
studio
onlineshop
infocenter
news
sind alles eigene kategoriebäume

sprich studio onlineshop infocenter und news in der headernavi main sind redirects auf die jeweiligen katbäume

und sobald ich den kategoriebaum wechsle geht die $naviswitch und auch die funktionalitäta an sich verloren
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf »

korrektur:

im oben stehenden code fehlte die elseanweisung

Code: Alles auswählen

if (!isset($naviswitch)) {       
        $sess->register("naviswitch");
        } else {
                $naviswitch = $_GET["naviswitch"];
               } 
habe ich nachgetragen

somit ist das problem des kategoriebaumwechsels gelöst.

bleibt offen, wie man die aktuelle $naviswitch der laufenden session auch in redirects und dem navigationspfad mitgeben kann :?: :?: :?:
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

ok, habe dir ein modul gebastelt - geht ja bei mir schneller ...

schritt für schritt anweisung:

1. Neues Layout erstellen mit folgendem inhalt:

Code: Alles auswählen

CMS_CONTAINER[1]
2. Modul erstellen:
INPUT:

Code: Alles auswählen

$str_content = "";


$db = new DB_Contenido;
$db2 = new DB_Contenido;


$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);
		
$z = 0;
			
while ( $db->next_record() ) {
    
   $spaces = "";
    
   for ($i = 0; $i < $db->f("level"); $i ++) {
      $spaces .= "&nbsp;&nbsp;&nbsp;";
   }

   $str_selected = "";
   if ("idcat=" . $db->f("idcat") == "CMS_VALUE[666]") {
      $str_selected = ' selected="selected"';
   }
   
   $str_content.= '<option value="idcat=' . $db->f("idcat") . '"' . $str_selected . '>' . $spaces . urldecode($db->f("name")) . '</option>' . "\n";
   
	//gibt es artikel in dieser categorie?
                $sql2 = "SELECT
                        al.idart,
                        al.title
            	    FROM
                        ".$cfg["tab"]["art"]." AS a,
                        ".$cfg["tab"]["cat_art"]." AS ca,
                        ".$cfg["tab"]["art_lang"]." AS al
                    WHERE
                        a.idclient = '".$client."' AND
                        a.idart = ca.idart AND
                        ca.idart = al.idart AND
                        ca.idcat='".$db->f("idcat")."' AND
                        al.idlang='".$lang."' AND
                        al.online = '1'
                    ORDER BY
                        al.artsort, al.title, al.idart ASC";
    $db2->query($sql2);
				
				
				
   while ( $db2->next_record() ) {
      $newspaces = $spaces . "&nbsp;&nbsp;&nbsp;";
					
                    
      $str_selected = "";
      if ("idart=" . $db2->f("idart") == "CMS_VALUE[666]") {
         $str_selected = ' selected="selected"';
      }
   
      $str_content.= '<option value="idart=' . $db2->f("idart") . '"' . $str_selected . '>' . $newspaces . "> " . urldecode($db2->f("title")) . '</option>' . "\n";
   }
			
				
} // end while

print mi18n("Bitte Ziel auswählen:") . '<br>';
print '<select name="CMS_VAR[666]">' . $str_content . '</select>';
OUTPUT:

Code: Alles auswählen

<?php

$str_uri = "front_content.php?changelang=" . $lang . "&client=" . $client;

if (strlen("CMS_VALUE[666]") > 0) {
   $str_uri.= "&" . "CMS_VALUE[666]";
}

// hier custom parameter hinzufügen
$str_uri.= "&naviswitch=" . $naviswitch;

header  ("Location: " . $cfgClient[$client]["path"]["htmlpath"] . $str_uri);

?>
3. Template erstellen und neues Layout auswählen sowie neues Modul auswählen

4. Template Kategorie zuweisen und Weiterleitungsziel konfigurieren

5. Artikel der weiterleiten soll erstellen

das sollte es gewesen sein - bei mir klappt es tadellos.

die snippets oben sind so geschrieben dass Sie sowohl in der 4.4.x als auch 4.5/4.6 er laufen sollte.
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf »

man stese, hammer

noch nicht getestet aber schon mal viiiiieeeeeeeeelen dank !!!werde mich gleich dranmachen.

im übrigen hast du recht denn bei mir würde das viiieeeel länger dauern und im übrigen sitze ich auch schon seit 1 1/2 stunden dran :LOL:

aslo danke zunächst feedback kommt gleich
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf »

thas it !!!

nochmals vielen lieben dank :)

und im übrigen habe ich wieder was gelernt, dein modulinput listet nämlich die auswahl der kategorie sehr schon auf nämlich eingerückt und mit pfeil

muss das gleich mal an einem anderemmodul testen, da wird alles nur flat untereinander im dropdown ausgegeben, auf die dauer sehr mühsam zum suchen

also merci dir again 'n again 'n again 'n again 'n again 'n .........
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf »

muss einfach nochmal posten und dank sagen weil ich so verzückt bin

habe das nun implementiert und bin happy ohne ende
'workz so smooth'

und das in den breacrumbs immer die offne navi angezeigt wird wenn man drauf clickt, finde ich gar nicht mal soooo schlecht
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf »

und nun die hiobsbotschaft

mal funzt es mal nicht und ich kann nicht rekonstruieren warum :(

ich habe jetzt nochmal alles retour gespult. alle kategorien und artikel die das template nutzen auf 'kein template' gesetzt, dann das template gelöscht, das modul gelöscht, das layout gelöscht.

dann wieder von vorn nach deinen anweisungen:

layout erstellt
modul erstellt, btw was muss ich bei 'TYP:' einstellen ?
template erstellt
kategorie das template zugewiesen
startartikel in der kategorie erstellt
startartikel template zugewiesen und konfiguriert

redirect funktioniert, naviswitch nicht ???

keine einträge im errorlog

:?:
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

wie äußert sich denn deine nichtfunktion? schau dir mal die url an - ist naviswitch in der url gefüllt oder nicht? du musst natürlich dafür sorge tragen, dass diese variable auch immer gefüllt ist - wenn sie nicht gefüllt ist, kann sie nämlich auch nicht an die url angehangen werden.
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf »

stese hat geschrieben:wie äußert sich denn deine nichtfunktion? schau dir mal die url an - ist naviswitch in der url gefüllt oder nicht? du musst natürlich dafür sorge tragen, dass diese variable auch immer gefüllt ist - wenn sie nicht gefüllt ist, kann sie nämlich auch nicht an die url angehangen werden.
dass ist ja gerade das ding

die wird nicht angehangen

headernavi/studio ist eine kategorie mit dem tempate redirect auf neuen kabaum studio, darin steckt ein artikel auch mit template redirect auf studio

wenn ich aber im header drüber fahre mit der maus zeigt er mir nur idcat=1 eben die idcat der kategorie studio ??

stehe voll auf dem schlauch
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
Gesperrt