Advanced Mod Rewriting Contenido 4.6.x

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

Beitrag von stese » So 20. Nov 2005, 00:47

sobald die 4.6.3 draussen ist, gibt es wieder eine modifizierte version meinerseits. ich werde da ein paar kleinigkeiten im script geändert haben, damit das ganze auch bei tieferer verschachtelung besser skalierbar ist. dazu wird allerdings später eine anpassung der .htaccess notwendig sein ...

sobald ich diese version aktualisiert habe poste ich es hier.

vielen dank schon einmal an morpheus für die mühen der anpassung.

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

Beitrag von MyAccount » Di 22. Nov 2005, 23:56

Bei mir klappt leider gar nichts. Steht immer noch front_content im Frontend. Muss man erst die Dateien auf den Server kopieren bevor man einen Mandanten mit Inhalten anlegt?

Hab modrewrite mal manuell gemacht:

www.domain.tld/ARTIKELNAME_1_2_3_4.html

Da musste ich auch alle Navigationsmodule anpassen. Ist das jetzt nicht mehr notwendig? Wie kann ich den Fehler finden?

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

Beitrag von stese » Mi 23. Nov 2005, 08:14

hi,

in diesem thread geht es um die contenido erweiterung advanced modrewrite - das ist ein komplett bundle der contenido version, so modifiziert, dass der anwender eigentlich nichts mehr tun muss. so wie es bei dir läuft müsstest du wahrscheinlich alle deine navigationsmodule umprogrammieren.

eine erklärung was die erweiterung macht, gibt es bei dem bundle für die contenido version 4.4.4 (findest du hier), hier in diesem thread wird die anpassung dieserer erweiterung an die aktuelle contenido version besprochen.

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

Beitrag von MyAccount » Mi 23. Nov 2005, 22:23

Alles klar. Also praktisch so, wie ich es manuell schon einmal gemacht habe. Unterschied: Ihr habt die "/" in "www.domain.tld/kategorie/artikel.." in den Griff bekommen. Hatte ich nie geschafft. ;-)

Wenn Du von Bundle sprichst, dann ist in der ZIP in diesem Thread aber doch bis auf die Navi-Anpassungen alles enthalten, oder?!

Danke MyAccount

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

Beitrag von stese » Mi 23. Nov 2005, 22:27

die zip ermöglicht einfaches modRewrite OHNE seine Module umprogrammieren zu müssen. da dafür dateien im core des CMS modifiziert werden mussten, gibt es für diese erweiterung immer ein extra bereitgestelltes bundle. die funktionsweise ist hier im ersten post erklärt.

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

Beitrag von MyAccount » Mi 23. Nov 2005, 23:13

??? Ich hab den Thread komplett durchgestöbert. Sieht nach einer ganze Menge Arbeit aus, die da erledigt wurde. Super Leistung. Leider bin ich nicht schlauer geworden. :-(

Ich habe in dem Thread einen Link auf eine Anleitung gefunden. Da stehen aber genau die Sachen drin, die auch in der ZIP in diesem Thread hier beschrieben werden.

Und das mit den Navigationsmodule ist ein Mißverständnis. Die Module, die ich jetzt hier einsetzte sind die Standard-Module aus der 4.6.2 Neuinstallation.

Und wenn ich Dich richtig verstehe, dann brauche ich nur die ZIP-Datei (Bundle für 4.6.2) und ändere damit auch die CORE von Contenido?! Wenn man z.B. die contenido/includes/config.php als CORE bezeichnen mag.

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

Beitrag von stese » Mi 23. Nov 2005, 23:35

ja. die zip beinhaltet gut 5-6 veränderte dateien des cores (basisdateien der offiziellen contenido version) damit das ganze funktioniert. in der config werden lediglich grundeinstellungen zu dieser engine vorgenommen.

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

Beitrag von MyAccount » Do 24. Nov 2005, 08:56

Dann hab ich also mit der ZIP alles, was ich für advanced modrewrite brauche. Zumindest habe ich in dem von Dir genannten "großen" Thread nichts anderes finden können.

Werde das ganze mal auf einen anderen Server testen. Hier, bei uno und uno klappt es leider nicht. Oder hab ich was in der Mandanteneinstellung vergessen? Außer der neuen XHTML-Checkbox hat sich da aber auch nicht viel verändert.

Wenn ich wenigstens eine Fehlermeldung bekommen hätte. Aber das CMS, Frontend und Backend, läuft weiter, als hätte ich keine Änderungen (ZIP) eingespielt. Sehr komisch.

Gruß und Danke MyAccount

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

Beitrag von stese » Do 24. Nov 2005, 10:01

bei 1und1 haben wir auch ein cms mit dem advanced modrewrite laufen, allerdings noch mein 4.5.3er paket. das 4.6er habe ich ja noch nicht probiert, sollte aber problemlos laufen (.htaccess nicht vergessen, in der config.php die modrewrite schalter aktivieren etc)

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

Beitrag von MyAccount » Do 24. Nov 2005, 16:16

Hallo Stese,

Du hast ja vielleicht eine Geduld. :-)

Ich habe die Verzeichnisse bei one und one wie folgt:

cms
cms.kunde.de
conlib
contenido
...usw.

So sehen die Änderungen in der Config.php bei mir aus:

Code: Alles auswählen

// edit by stese
/* Use advanced mod_rewrites */
$cfg['mod_rewrite']['use'] = 1;

# Wichtig!!!! Pfad an eigenes Basis Verzeichnis anpassen (relativ zur root des ftp)
/* Path to the htaccessfile with trailling slash */
$cfg['mod_rewrite']['rootdir'] = '/cms.kunde.de/';

/* Start TreeLocation vrom Root Tree (set to 1) or get location from first category (set to 0) */
$cfg['mod_rewrite']['startfromroot'] = 0;

/* is multilanguage? */
$cfg['mod_rewrite']['use_language'] = 0;
// end edit by stese
Zum Vergleich hier mal der Contenido-Pfad:

Code: Alles auswählen

$cfg['path']['contenido']               = '/homepages/00/d12345678/htdocs/contenido/';
Und das ist die .htaccess aus dem Verzeichnis cms.kunde.de:

Code: Alles auswählen

DirectoryIndex front_content.php
RewriteEngine on
RewriteRule ^(de|en|fr|sp|deutsch|Deutsch|English|englisch|franzoesisch|Francais|spanisch|spain|espanol)/([^/]*)/([^/]*)/([^/]*)/(.*).html$ front_content.php?langname=$1&catnames[]=$2&catnames[]=$3&catnames[]=$4&artname=$5 [QSA,L]
RewriteRule ^(de|en|fr|sp|deutsch|Deutsch|English|englisch|franzoesisch|Francais|spanisch|spain|espanol)/([^/]*)/([^/]*)/([^/]*)/$ front_content.php?langname=$1&catnames[]=$2&catnames[]=$3&catnames[]=$4 [QSA,L]
RewriteRule ^(de|en|fr|sp|deutsch|Deutsch|English|englisch|franzoesisch|Francais|spanisch|spain|espanol)/([^/]*)/([^/]*)/(.*).html$ front_content.php?langname=$1&catnames[]=$2&catnames[]=$3&artname=$4 [QSA,L]
RewriteRule ^(de|en|fr|sp|deutsch|Deutsch|English|englisch|franzoesisch|Francais|spanisch|spain|espanol)/([^/]*)/([^/]*)/$ front_content.php?langname=$1&catnames[]=$2&catnames[]=$3 [QSA,L]
RewriteRule ^(de|en|fr|sp|deutsch|Deutsch|English|englisch|franzoesisch|Francais|spanisch|spain|espanol)/([^/]*)/(.*).html$ front_content.php?langname=$1&catnames[]=$2&artname=$3 [QSA,L]
RewriteRule ^(de|en|fr|sp|deutsch|Deutsch|English|englisch|franzoesisch|Francais|spanisch|spain|espanol)/([^/]*)/$ front_content.php?langname=$1&catnames[]=$2 [QSA,L]
RewriteRule ^(de|en|fr|sp|deutsch|Deutsch|English|englisch|franzoesisch|Francais|spanisch|spain|espanol)/(.*).html$ front_content.php?langname=$1&artname=$2  [QSA,L]
RewriteRule ^(de|en|fr|sp|deutsch|Deutsch|English|englisch|franzoesisch|Francais|spanisch|spain|espanol)/index.html$ front_content.php [QSA,L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/(.*).html$ front_content.php?catnames[]=$1&catnames[]=$2&catnames[]=$3&artname=$4 [QSA,L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/$ front_content.php?catnames[]=$1&catnames[]=$2&catnames[]=$3 [QSA,L]
RewriteRule ^([^/]*)/([^/]*)/(.*).html$ front_content.php?catnames[]=$1&catnames[]=$2&artname=$3 [QSA,L]
RewriteRule ^([^/]*)/([^/]*)/$ front_content.php?catnames[]=$1&catnames[]=$2 [QSA,L]
RewriteRule ^([^/]*)/(.*).html$ front_content.php?catnames[]=$1&artname=$2 [QSA,L]
RewriteRule ^([^/]*)/$ front_content.php?catnames[]=$1 [QSA,L]
RewriteRule ^(.*).html$ front_content.php?artname=$1 [QSA,L]
RewriteRule ^index.html$ front_content.php [QSA,L]
Und mal verkürzt die Navi-Ausgabe 1.Ebene:

Code: Alles auswählen

<?php
if ( !is_object($db2) ) {
    $db2 = new DB_Contenido;
}
if (!function_exists("catIsChildOf"))
{
  function catIsChildOf($id, $idparent) {
    global $cfg, $client, $lang;
    $db = new DB_Contenido;
    $parent = $id;
    while ( $parent != 0 ) {
      $sql = "SELECT
                      a.parentid
              FROM
                      ".$cfg["tab"]["cat"]." AS a,
                      ".$cfg["tab"]["cat_lang"]." AS b
              WHERE
                      a.idclient  = '".$client."' AND
                      b.idlang    = '".$lang."' AND
                      a.idcat     = b.idcat AND
                      a.idcat   = '".$parent."'";
      $db->query($sql);
      $db->next_record();
      $parent = $db->f("parentid");
      if ($parent == $idparent) {
        return true;
      }
    }
    return false;
  }
}
if ( catIsChildOf($idcat, "CMS_VALUE[0]") ) {
  $sel_idcat = $idcat;
} else {
  $sel_idcat = "CMS_VALUE[0]";
}
include_once($cfg["path"]["contenido"] . 'classes/class.template.php');
$navitems = array();
$tpl = new Template;
function nav($idcat) {
  global $navitems, $client, $lang, $cfg;
  $db  = new DB_Contenido;
  $db2 = new DB_Contenido;
  $sql = "SELECT parentid FROM ".$cfg["tab"]["cat"]." WHERE idcat = '$idcat'";
  $db->query($sql);
  $db->next_record();
  $parentid = $db->f("parentid");
  if ( $parentid == 0 ) {
    if ( $idcat != "CMS_VALUE[0]" ){
      $navitems = array();
      $sql = "SELECT
                       A.idcat,
                       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
                       B.idclient  = '$client' AND
                       C.idlang    = '$lang'   AND
                       C.visible   = '1'       AND
                       B.parentid  = 'CMS_VALUE[0]'
              ORDER
                       BY A.idtree";
      $db->query($sql);
      while ($db->next_record()) {
        $sql = "SELECT
                        a.external_redirect AS ext
                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
                        b.is_start  = '1' 
                AND
                        c.idclient  = '".$client."' 
                AND
                        c.idcat     = b.idcat 
                AND
                        a.idart     = b.idart 
                AND
                        a.idlang    = '".$lang."'";
        $db2->query($sql);
        $db2->next_record();
        $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
        $navitems[$db->f("idcat")] = array("idcat"   => $db->f("idcat"),
                                           "name"    => $db->f("name"),
                                           "target"  => $target);
      }
    }
    return true;
  }
  $sql = "SELECT
                  A.idcat,
                  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
                  B.idclient  = '$client' 
          AND
                  C.idlang    = '$lang' 
          AND
                  C.visible   = '1' 
          AND
                  B.parentid  = '$parentid'
          ORDER BY
                  A.idtree";
  $db->query($sql);
  while ($db->next_record()) {
    $sql = "SELECT
                    a.external_redirect AS ext
            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
                    b.is_start  = '1' 
            AND
                    c.idclient  = '".$client."' 
            AND
                    c.idcat     = b.idcat 
            AND
                    a.idart     = b.idart 
            AND
                    a.idlang    = '".$lang."'";
    $db2->query($sql);
    $db2->next_record();
    $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
    $tmp_nav[$db->f("idcat")] = array("idcat"   => $db->f("idcat"),
                                      "name"    => $db->f("name"),
                                      "target"  => $target);
  }
  $tmp_nav[$idcat]["sub"] = $navitems;
  $navitems = $tmp_nav;
  nav($parentid);
  }  // end function
  $sql = "SELECT
                  A.idcat,
                  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
                  B.idclient  = '$client' 
          AND
                  C.idlang    = '$lang' 
          AND
                  C.visible   = '1' 
          AND
                  B.parentid  = '$sel_idcat'
          ORDER BY
                  A.idtree";
  $db->query($sql);
  while ( $db->next_record() ) {
    $sql = "SELECT
                     a.external_redirect AS ext
            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
                     b.is_start  = '1' 
            AND
                     c.idclient  = '".$client."' 
            AND
                     c.idcat     = b.idcat 
            AND
                     a.idart     = b.idart 
            AND
                     a.idlang    = '".$lang."'";
    $db2->query($sql);
    $db2->next_record();
    $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
    $navitems[$db->f("idcat")] = array("idcat"  => $db->f("idcat"),
                                       "name"   => $db->f("name"),
                                       "target" => $target);
  }
nav($sel_idcat);
ob_start();
foreach ($navitems as $key => $data) {
  $tpl->reset();
  $tpl->set('d', 'NAME',  $data['name']);
  $tpl->set('d', 'TARGET', $data['target']);
  $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat']));
  $tpl->next();
  if ($idcat == $data['idcat'] || is_array($data['sub'])) {
    $tpl->generate('templates/mainnav_1_1.html');
  } else {
    $tpl->generate('templates/mainnav_1_0.html');
  }
} // end foreach
$html = ob_get_contents();
ob_end_clean();
echo $html;
?>
Der Rest hab ich laut der ZIP kopiert und die dbinstaller hab ich auch ausgeführt. Und es passiert nix. :-) Ich wette, ich seh den Wald wieder mal vor lauter Bäumen nicht.

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

Beitrag von stese » Do 24. Nov 2005, 16:22

kannst du mir per private nachricht mal die url zum server geben? dann schaue ich mir das später mal an.

bookingman
Beiträge: 2
Registriert: Di 22. Nov 2005, 13:14
Kontaktdaten:

Bekomme modrewrite einfach nicht hin...

Beitrag von bookingman » Fr 25. Nov 2005, 12:13

Hallo stese, hallo morpheus,

bin ein Newbie und würde mich freuen, wenn ihr mir helfen könntet. Habe das advanced modrewrite installiert und bekomme es einfach nicht zum Laufen.

Nach zwei Tagen an Versuchen gebe ich nun verzweifelt auf und frage mal hier nach. :oops:

Bestimmt ist es für einen Profi nur eine Kleinigkeit...

Hier kommt ihr auf die Seite (die ja nicht läuft): http://www.heimwerker-netzwerk.de/cms/

Würde mich über einen Tipp sehr freuen!

bookingman
Beiträge: 2
Registriert: Di 22. Nov 2005, 13:14
Kontaktdaten:

Hat sich erledigt...

Beitrag von bookingman » Fr 25. Nov 2005, 20:25

...habe den Restvom tag jetzt auch noch rumprobiert, jetzt läufts endlich :lol:

Trotzdem Danke!

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

Beitrag von stese » Fr 25. Nov 2005, 20:34

sorry - habe den ganzen tag beim kunden verbracht und komme jetzt am wochenende auch zu nix.

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

Beitrag von MyAccount » Sa 26. Nov 2005, 23:44

Nun bin ich soweit, dass sich endlich was zeigt. Ich hab contenido komplett neu installiert und dann die ZIP-Datei drüber kopiert und die dbinstaller aufgerufen.

Leider scheint hier komplett was in die Hose gegangen zu sein. Ich denke es liegt an meiner Art der Installation von Contenido und der Pfadeinrichtung. Aber vielleicht irre ich mich da auch wieder. ;-)

Ich richte mir immer eine extra Subdomain für das Backend ein.

login.cms.domain.tld

Das Frontend erhält dann immer

cms.domain.tld

Mein Web-Verzeichnis sieht so aus:

domain.tld
cms
conlib
contenido
pear
...

Wenn ich jetzt den Pfad des Beispielmandanten anpasse von login.cms.domain.tld (das setzt Contenido so) in cms.domain.tld dann sehe ich in der Adressleiste der Beispiel-Webseite im Frontend die gewünschten /cms/kategoriename/ aber vorneweg immer noch login.cms.domain.tld und bekomme eine Fehlermeldung. Völlig zu Recht natürlich.

Aber wo liegt der Fehler? In der Art und Weise meiner Subdomains und meiner Verzeichnisstruktur oder im adv_modrewrite?

Gesperrt