Advanced Mod Rewriting Contenido 4.4.4

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

Beitrag von stese » Do 24. Mär 2005, 23:09

ok habs geändert:

öffne datei /contenido/classes/class.modrewrite.php

suche nach der funktion "build_new_url()" (zeile 407) und ersetze diese mit folgender:

Code: Alles auswählen

	/**
     * build_new_url()
	 *
     * build new url from given arguments
	 *
	 * get querystring of front_content.php and 
	 * convert this url to the new mod_rewrite url
	 * method will be startet before the complete 
	 * output of the front site will be executed
	 *
	 * @param	string	given arguments
     * @return 	string	new url
     */
	function build_new_url ( $str_args = "" ) {
		global $cfg, $lang, $client;
		
		$str_new_url = "";
		$str_categories = "";
		$str_article = "";
		
		// check arguments ... and split
		$str_args = str_replace ( "?", "", $str_args );
		$str_args = str_replace ( "&", "&", $str_args );
		parse_str ($str_args);
		
		
        // get additional non contenido parameters
        $str_additional_params = '';
        $arr_additional_params = array();
        $arr_param_pairs = split( "&", $str_args );
        
        $arr_ignored_params = array ( 'idcat', 'idart', 'lang', 'client', 'idcatart' );
        
        foreach ( $arr_param_pairs as $str_pair ) {
            $bol_found_bad = false;
            $arr_param = split ( "=", $str_pair );
            
            foreach ( $arr_ignored_params as $str_key ) {
                if ( $str_key == strtolower(trim($arr_param[0])) ) {
                    $bol_found_bad = true;
                    break;
                }
                
            }
            if ( $bol_found_bad == false ) {
                $arr_additional_params[] = $arr_param[0] . '=' . $arr_param[1];
            }
          
        }
        if ( count ( $arr_additional_params ) > 0 ) {
            $str_additional_params = '?' . join ( "&", $arr_additional_params );
        }
        
		// set language? 
		$str_lang = ($cfg["mod_rewrite"]['use_language'] == 1 ) ? ModRewrite::get_language_name($lang) . "/" : '';
	
		// define rootpath ...
		$str_new_url = $cfg['mod_rewrite']['rootdir'] . $str_lang;
		
        // handle idcatart
        if (isset($idcatart) && $idcatart > 0 && ( !isset($idcat) || $idcat == 0 ) && ( !isset($idart) || $idart == 0 )) {
            $db = new DB_Contenido;
			
			$sql = "SELECT idcat, idart
					FROM " . $cfg["tab"]["cat_art"] . " 
					WHERE idcatart = '$idcatart'";
    	    $db->query($sql);
			$db->next_record();
			
			$idcat = $db->f('idcat');
            $idart = $db->f('idart');
        }
        
		// check if article id is given and set article url
		if (isset($idart) && $idart > 0) {
			$str_article = ModRewrite::get_art_websafename ( $idart, $lang ) . ".html";
		}
		
		// check if only article id is given, cat id have to rebuild
		if (isset($idart) && $idart > 0 && ( !isset($idcat) || $idcat == 0 ) ) {
			$db = new DB_Contenido;
			
			$sql = "SELECT idcat
					FROM " . $cfg["tab"]["cat_art"] . " 
					WHERE idart = '$idart'";
    	    $db->query($sql);
			$db->next_record();
			
			$idcat = $db->f('idcat');
		}
		
		// ok build dir list, if idcat found ...
		if (isset($idcat) && $idcat > 0) {
			$str_categories = ModRewrite::build_recursiv_path ( $idcat, $lang );
			
			// check start directory settings
			if ( $cfg['mod_rewrite']['startfromroot'] == 0 ) {
				// splitt string in array
				$arr_categories = split( "/", $str_categories);
				
				// remove first category
				$str_first_cat = array_shift ( $arr_categories );
				
				// implode array with categories to new string 
				$str_categories = join ( "/",  $arr_categories );
			}
		}
		
		
		return $str_new_url . $str_categories . $str_article . $str_additional_params;
		
	}	// end function
ich update gleich mal das zip file.
hier funktionierts: http://contenido.polycoder.com/

Salech
Beiträge: 89
Registriert: So 5. Dez 2004, 11:00
Kontaktdaten:

Beitrag von Salech » Fr 25. Mär 2005, 11:55

Applaus!! Jetzt klappt es!!

xraid
Beiträge: 8
Registriert: Mo 4. Apr 2005, 20:26
Kontaktdaten:

Updatemöglichkeit bei bestehenden Projekten?

Beitrag von xraid » Mo 4. Apr 2005, 20:40

Hallo Stese,

du schreibst, das Bundle ist für den Grundaufbau einer neuen Präsenz gedacht.
Verstehe ich richtig, dass das auch heißt, dass es nichts bringt bei einem bestehendem Projekt die Änderungen in den Files selbst vorzunehmen, da in der DB die websafenamen zu den Artikeln und Kategorien fehlen?

Habe nämlich bei einem bestehendem Projekt versucht gerade das zu tun, mit dem Ergebniss, dass im Backend keine Artikel mehr sichtbar waren - oder läuft da etwas anderes schief?

lg
Rainer

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

Beitrag von stese » Mo 4. Apr 2005, 20:46

fast. im backend sollte alles nach wie vor laufen. aber wie du es zuerst korrekt erkannt hast gibt es derzeit kein update script, was die websicheren namen automatisch setzt. also im frontend dann ordentliche urls daraus macht. einziger ausweg bisher: in jede kategorie gehen und auf umbennen klicken, danach nichts ändern und ok (dabei wird der name gesetzt) gleiches gilt bei den artikeln. in die eigenschaften gehen und danach speichern.

xraid
Beiträge: 8
Registriert: Mo 4. Apr 2005, 20:26
Kontaktdaten:

Keine Artikel zu sehen

Beitrag von xraid » Mo 4. Apr 2005, 21:53

Hallo Stese,

danke für die Informationen. Habe nochmals alles per Hand installiert.
Ich sehe im Backend die Kategorien, kann diese nun auch ohne eine Änderung durchzuführen umbenennen bzw. speicher.

Jedoch sehe ich keinen einzigen Artikel im Backend?

Die .htacess liegt im Verzeichniss vom root aus in /cms und ich habe das RewriteBase deswegen entfernt.
In der config steht /cms/ als Pfad, so wie in einem thread beschrieben

Wo könnte da der Fehler liegen? Hast Du eine Idee?

lg
Rainer

xraid
Beiträge: 8
Registriert: Mo 4. Apr 2005, 20:26
Kontaktdaten:

Ergänzung zum vorigen Beitrag

Beitrag von xraid » Mo 4. Apr 2005, 21:56

habe noch entdeckt, das unter "Style" ebenfalls nichts zu sehen ist ??

xraid
Beiträge: 8
Registriert: Mo 4. Apr 2005, 20:26
Kontaktdaten:

größten Teil gefunden

Beitrag von xraid » Mo 4. Apr 2005, 23:04

Hallo,

habe wohl etwas zu früh gepostet, sorry. Den größten Teil der Probleme konnte ich mit Dateivergleich herausfinden.
Alle Artikel sichtbar - alle neu gespeichert - alle websafenamen wurden geschrieben.

Leider bekomme ich in der Vorschau und Live keine Seiten zu Gesicht.

Könnte es sein dass der Provider den Rewrite erst erlauben muss?
(Bin da überhaupt kein Profi)

lg
Rainer

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

Beitrag von stese » Di 5. Apr 2005, 08:44

im backend wird kein mod rewrite angewendet - das wird nur im frontend (also wenn man nicht eingeloggt ist) angewendet. aber wenn du gar nichts angezeigt bekommst, ist dies bei contenido der hinweis, dass irgend ein grober parse error vorliegt. schau mal bitte in dein error log. bzw geh auf nummer sicher und nimm die zip welche ich verlinkt habe, die funktioniert.

xraid
Beiträge: 8
Registriert: Mo 4. Apr 2005, 20:26
Kontaktdaten:

Einen Fehler gefunden, aber nicht alles klar

Beitrag von xraid » Di 5. Apr 2005, 10:20

Hallo Stese,

ich habe in der front_content.php etwas übersehen und einen kleinen Teil aus Deinem neuen ZIP vergessen.
Soweit so gut - der rewrite arbeitet.

Was mir aber nun unverständlich ist, dass die Startseite so aussieht wie es sein soll, sobald man auf einen Link klickt, die Seite verrückt spielt - styles, bilder, hintergrundbilder etc. fehlen.

Vielleicht hast Du Zeit einen Blick draufzuwerfen (ist momentan ein Arbeitsbereich, bis die Seite fertig ist und die Domain übersiedelt wird)
http://ak000020.host.inode.at/cms/

lg
Rainer

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

Beitrag von stese » Di 5. Apr 2005, 10:38

ich schätze mal deine styles und bilder sind relativ eingebunden (nur href="styles.css" oder src="bild.jpg" ... ) dadruch dass das mod rewrite nun aber unterverzeichnisse simuliert, sucht er diese dateien in den falschen (nicht existenten) verzeichnissen.

abhilfe schafft da ein absolutes setzen der links und bilder bzw ein kleiner tag im head der html seite:

Code: Alles auswählen

<base href="http://www.domain.de/">
wo man das startverzeichnis von so wie bilder und anderen dateien relativ liegen eintragen kann.

wenn du nicht weisst wie es geht, dann sollte selfhtml deine wahl sein.

xraid
Beiträge: 8
Registriert: Mo 4. Apr 2005, 20:26
Kontaktdaten:

Alles klar

Beitrag von xraid » Di 5. Apr 2005, 11:34

Danke für den Hinweis, das war es mit dem Design.

Ein letztes Mal muss ich nochmals nervig sein, dann sollte aber alles klappen:

Ich setze mehrere Artikellisten ein
Wenn man nun einen Artikel aus den Listen wählt, wird ein Link z.b in der Newsbox der Artikel LiIon mit dem Ergebnis:

http://ak000020.host.inode.at/cms/LiIon.html?m=&s=

generiert. Das ist bei allen Artikeln von Artikellisten so.

Der erste Teil ist praktisch richtig, aber "?m=&s=" führt dann nicht zum richtigen Artikel aus der Liste, sondern zum Startartikel der Hauptseite

Wo kann man dass korrigieren?

lg
Rainer

xraid
Beiträge: 8
Registriert: Mo 4. Apr 2005, 20:26
Kontaktdaten:

Erfahrung Artikelliste u. mod_rewrite

Beitrag von xraid » Di 5. Apr 2005, 20:27

Hallo,

hat von Euch schon jemand Erfahrungen mit dem rewrite Mod von Stese und Artikellisten gesammelt?
Bei mir funkionieren die rewrites bei Artikeln der Artikellisten nicht korrekt und da ich kein Profi bin, weiss ich keinen Rat mehr wo ich da ansetzen sollte. (siehe voriger Beitrag)

Möglicherweise kann man im Outputcode der verwendeten Artikelliste den Fehler beheben:

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* REFERENZ MODUL / ARTIKELLISTE
*
* Artikelliste mit Img 1, Head 1, Head 2
*
* Erstellt eine Liste mit allen Artikel bis
* auf den Startartikel.
*
* Author      :     Jan Lengowski
* Copyright   :     four for business AG
* Created     :     15-08-2002
* Modified    :     16-08-2002
************************************************/

// second db class instance
$db2 = new DB_Contenido;

// selected category
$selcat = "CMS_VALUE[0]";

 if($selcat!="0" && $selcat!=""){

// select all articles in category widthout start article
$query = "SELECT ARTLANG.idart, ARTLANG.idartlang FROM ".$cfg["tab"]["cat_art"]." AS CATART, ".
          $cfg["tab"]["art_lang"]." AS ARTLANG ".
         "WHERE CATART.idcat = '$selcat' AND ARTLANG.idart = CATART.idart AND ARTLANG.idlang = '$lang' AND ".
         "ARTLANG.online = '1' ORDER BY CATART.idart DESC";

// execute query
$db->query($query);

unset($articleID);
unset($linkID);

// get id's of sub articles
while ($db->next_record()) {
  $articleID[] = $db->f("idartlang");
  $linkID[] = $db->f("idart");
} // end while

// loop through subarticles

echo '
<table width="200" border="0" cellspacing="0" cellpadding="0">
<tr><td height="20" width="20" style="border: 0px; background-color: #78ACDB"><img src="images/pfeil.jpg" width="20" height="20" border="0"></td>
<td width="180" height="20" style="border: 0px; background-image:url(images/bg_box_heading1.jpg); background-repeat: repeat-x; padding-left: 10px" class="punkte">CMS_VALUE[2]</td></tr>
';

if (is_array($articleID)) {

    foreach ($articleID as $key => $value) {

          // select all CMS variables of the article
          $sql = "SELECT * FROM ".$cfg["tab"]["content"]." WHERE idartlang = '$value' AND idtype = '1' AND typeid = '1'";
          $db->query($sql);
          $db->next_record();
          $head = urldecode($db->f("value"));

          if ( strlen($head) > "CMS_VALUE[3]") {
            $head = substr($head, 0, "CMS_VALUE[3]");
            $head .= '..';
          }


//ab hier scheint der Fehler zu entstehen bzw. rewrite etwas unvollständig
//zu machen

          // link
         $link = $sess->url("front_content.php?client=$client&lang=$lang&idcat=$selcat&idart=$linkID[$key]&m=$m&s=$s");

          echo '<tr><td colspan="2" class="text" height="22" style="border: 1px; border-top:0px; border-color: #5476C0; border-style: solid; background-color: #E6E6E6; padding-left:10px"><a href="'.$link.'">-&nbsp;'.$head.'</a></td></tr>';

    } // end while



          unset($headline);
        unset($text);
        
    } // end foreach
    
} // end if (is_array)

echo '</table>';


?>

Andreas B.
Beiträge: 2
Registriert: Mi 6. Apr 2005, 18:44
Kontaktdaten:

Kein mod-rewrite beim 2. Mandanten?

Beitrag von Andreas B. » Mi 6. Apr 2005, 18:50

Hallo,

hat jemand diese Version schon mal mit mehr als einen Mandanten getestet? Beim 2. Mandanten wird bei mir jedenfalls kein mod-rewrite mehr angewendet!

Module der Komplett-Installation benutzt! Also die Modul-Sources sind mit denen vom ersten Mandanten identisch.


Beste Grüße erst einmal,

Andreas B.

Vince
Beiträge: 122
Registriert: So 6. Mär 2005, 12:53
Kontaktdaten:

Beitrag von Vince » Do 7. Apr 2005, 20:43

Hi,

und noch eine wichtige Frage, hat jemand das ganze schon mal unter 4.4.5 getestet?

Wenn es da auch funzen würde, wäre es genial 8)

greetz, Vince

Salech
Beiträge: 89
Registriert: So 5. Dez 2004, 11:00
Kontaktdaten:

Beitrag von Salech » Mo 11. Apr 2005, 10:53

Es funktioniert bei mir tadellos unter 4.4.5! 8)

Gesperrt