Seite 5 von 17

Verfasst: Do 24. Mär 2005, 23:09
von stese
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/

Verfasst: Fr 25. Mär 2005, 11:55
von Salech
Applaus!! Jetzt klappt es!!

Updatemöglichkeit bei bestehenden Projekten?

Verfasst: Mo 4. Apr 2005, 20:40
von xraid
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

Verfasst: Mo 4. Apr 2005, 20:46
von stese
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.

Keine Artikel zu sehen

Verfasst: Mo 4. Apr 2005, 21:53
von xraid
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

Ergänzung zum vorigen Beitrag

Verfasst: Mo 4. Apr 2005, 21:56
von xraid
habe noch entdeckt, das unter "Style" ebenfalls nichts zu sehen ist ??

größten Teil gefunden

Verfasst: Mo 4. Apr 2005, 23:04
von xraid
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

Verfasst: Di 5. Apr 2005, 08:44
von stese
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.

Einen Fehler gefunden, aber nicht alles klar

Verfasst: Di 5. Apr 2005, 10:20
von xraid
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

Verfasst: Di 5. Apr 2005, 10:38
von stese
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.

Alles klar

Verfasst: Di 5. Apr 2005, 11:34
von xraid
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

Erfahrung Artikelliste u. mod_rewrite

Verfasst: Di 5. Apr 2005, 20:27
von xraid
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>';


?>

Kein mod-rewrite beim 2. Mandanten?

Verfasst: Mi 6. Apr 2005, 18:50
von Andreas B.
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.

Verfasst: Do 7. Apr 2005, 20:43
von Vince
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

Verfasst: Mo 11. Apr 2005, 10:53
von Salech
Es funktioniert bei mir tadellos unter 4.4.5! 8)