Original AdvancedMod Rewrite 4.6.15

DEDE
Beiträge: 314
Registriert: Do 19. Feb 2004, 16:15
Kontaktdaten:

Beitrag von DEDE » Di 12. Dez 2006, 22:22

Klasse! Das tat!
Danke.
Dede

milez
Beiträge: 29
Registriert: Fr 8. Dez 2006, 13:35
Kontaktdaten:

Beitrag von milez » Do 14. Dez 2006, 13:29

Ich habe folgendes Problem:

Ich habe ein contenido lokal entwickelt und dann auf einen Webserver geladen. (nicht zum ersten mal)

Alle pfade in der confing sowie in den mandanten einstellungen stimmen,
die base in der .htaccess stimmt

nun passiert folgendes:

kein Link funktioniert.
Artikel Links zeigen auf eine leere Seite
Kateorie Links werden weitergeleitet auf 404: /?error=1

Ich habe den cache, die aktiven sessions sowie die con_code schon geleert.

Außerdem habe ich /contenido/tools/updateseqruntime.php ausgeführt, was macht das eigentlich?

Weis jemand was abgeht??

walter999
Beiträge: 161
Registriert: Di 24. Mai 2005, 11:23
Wohnort: Rain/Dürnhart
Kontaktdaten:

Beitrag von walter999 » Do 11. Jan 2007, 16:17

Ich habe das selbe Problem wie schon manche hier. Upgrade auf 4.6.15 gemacht, modrewrite in der config.php aktiviert.

Problem: Keine Umwandlung der URLs, aber keine Fehlermeldungen.

Mit der 4.4.5 hat Modrewrite einwandfrei funktioniert, am Server liegts also nicht.

Gruß
Walter

milez
Beiträge: 29
Registriert: Fr 8. Dez 2006, 13:35
Kontaktdaten:

Beliebige Pfade

Beitrag von milez » Fr 12. Jan 2007, 12:33

Hallo Stese.

So wie ich das sehe ist es möglich jeden xbeliebigen Kategorie Pfad zu erzeugen.
z.B.:
http://www.polycoder.de/contenido-wcms/ ... atures5555

Währen falschgeschriebene Artikelnamen einen 404 error erzeugen, tun falsche Kategorienamen das nicht.

Man könnte so Unmengen an Duplicate Content erzeugen und diesen Bug seotechnisch kriminell ausnutzen.

Oder hab ich da etwas übersehen?

Ist es möglich, jede falsche Url als 404 auszugeben.

Gruß
Jan

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

Beitrag von stese » Fr 12. Jan 2007, 13:03

ja, kann man in den mandanteneinstellungen ändern, wie restriktiv er auf korrekte schreibweise achten soll. steht in den docs/techref des bundles

milez
Beiträge: 29
Registriert: Fr 8. Dez 2006, 13:35
Kontaktdaten:

Beitrag von milez » Fr 12. Jan 2007, 13:18

Super! Danke.

Vielleicht die beiden vars
category_resolve_min_percentage
redirect_invalid_article_to_errorsite
mit in die config nehmen?

Beste Grüße
Jan

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

Beitrag von stese » Fr 12. Jan 2007, 19:44

habs mit aufgenommen. ein neues bundle steht bereit.

changelog:

Code: Alles auswählen

2007-01-12
- diverse Bugfixe bei Modrewrite ohne Ordnerstruktur sowie 
  Erzeugung der websicheren Namen
- Bugfix bei Popups über TinyMCE. Wurde vorher nicht ersetzt, da 
  der TinyMCE standardmäßig statt ' den entsprechenden HTML Entity 
  ' geschrieben hat. Dieser Entity wird nun wieder "zurück"-
  konvertiert
- Bugfix Verlinkungen auf den Upload Ordner funktionierten im IE
  nicht, da dieser die Base Href Einstellungen dort ignorierte. 
  Nun wird allen upload/ Vorkommen der Mandantenpfad vorangestellt. 
- Bugfix der front_content.crcloginform.inc.php. Schreibfehler bei 
  URL zur Weiterleitung behoben.
- Defaultwert des einstellbaren Prozentsatzes für "ähnlich 
  klingende" URIs bei nicht gefundener Kategorie auf 75 gestellt.
download wie immer auf meiner website.

macfive
Beiträge: 2
Registriert: Di 16. Jan 2007, 16:06
Kontaktdaten:

hilfe bei standard Navi und übergeben der idart

Beitrag von macfive » Di 16. Jan 2007, 16:21

Hallo Community,

das ist mein erster Post und ich hoffe, dass ich eine Resonanz für mein Problem bekomme.

Vorweg muss ich sagen, dass ich in diesem Forum schon sehr viele nützliche Tools in mein COntenido einbauen konnte, riesen Danke erstma dafür.

nun zu meinem aktuellen Problem:
Ich habe Contenido 4.6.15 mit steses mr am Laufen, was prinzipiell auch wunderbar klappt.

Nun wollte ich einen Schritt weiter gehen und ausprobieren, ob ich es nur mit der Suche vom Forum schaffe, URLS zu bekommen, die anstatt so:

http://domain.de/kategorie/

so aussehen:

http://domain.de/kategorie/artikelname.html

Mit Hilfe von mvf ( thread: http://contenido.org/forum/viewtopic.php?t=13105 ) ist es mir gelungen, die HIlfsnavi dahingehend zu modifizieren.
Funktioniert wunderbar.....

Nun zu meinem Problem:
Ich setze KEINE geteilte HauptNavigation ein, sondern die standard HauptNavi, die beim Beispielmandanten dabei ist...

Ich habe nach Anleitung von Jaypeare ( http://contenido.org/forum/viewtopic.ph ... c&start=45 )

das Modul Hauptnavigation geändert:

Code Modul Hauptnavigation Output nach der Änderung gemäß Jaypeare:

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname  :      Hauptnavigation
* Author(s)   :     Jan Lengowski, Andreas Lindner, 4fb
* Copyright   :     Contenido - four for business, Andreas Lindner
* Created     :     12.08.2005
************************************************/

if (!function_exists("getIdart") ) {
  function getIdart ( $idartlang ) {
     global $cfg;

     $db = new DB_Contenido;
     $sql = "SELECT idart FROM " . $cfg["tab"]["art_lang"] . " WHERE idartlang = '" . (int)$idartlang . "'";
     $db->query($sql);
     $db->next_record();

     return (int)$db->f("idart");
  }
}

#System properties in use:
#Type: navigation, Name: idcat_homepage
#Contains idcat of tree to be displayed in main navigation

#Includes
cInclude("frontend", "includes/functions.navigation.php");

# hab ich eingefügt

#/hab ich eingefügt 
#If no tree is selected, use client setting
$start_cat = "CMS_VALUE[0]";
if ($start_cat=='') {
    $cApiClient = new cApiClient($client);
	$start_cat = $cApiClient->getProperty('navigation','idcat_homepage');
}

if ( !is_object($db2) ) {
    $db2 = new DB_Contenido;
}

/**
 * Check if a category is child
 * of another category
 *
 * @return boolean true/false
 * @author Jan Lengowski <Jan.Lengowski@4fb.de>
 * @copyright four for business AG 2003
 */
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, $start_cat) ) {
    $sel_idcat = $idcat;
} else {
    $sel_idcat = $start_cat;
}

/* Include Template Class */
include_once($cfg["path"]["contenido"] . 'classes/class.template.php');

/**
 * Array storing alle the
 * navigation data
 */
$navitems = array();


/* Template Instance */
$tpl = new Template;

/**
 * Recursive function for creating
 * the navigation array
 * @param Int $idcat Category id
 */
function nav($idcat) {

        global $navitems, $client, $lang, $cfg, $start_cat;

        $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 != $start_cat ){

                $navitems = array();
              
                $sql = "SELECT
                            A.idcat,
                            C.name,
                            C.public,
                            C.idcatlang
                            C.startidartlang

                        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  = '".$start_cat."'
                        ORDER
                            BY A.idtree";

                      $db->query($sql);

                      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';
	
	                                $navitems[$db->f("idcat")] = array("idcat" => $db->f("idcat"),
                                                                           "name"      => $db->f("name"),
                                                                          "idart"      => getIdart( $db->f("startidartlang") ),
                              "target"    => $target,
               "public" => $db->f("public"),
                        "idcatlang" => $db->f("idcatlang"));
	                            }
							}
                      }

           }
           
           return true;
        }

        $sql = "SELECT
                    A.idcat,
                    C.name,
		            C.public,
       			    C.idcatlang
                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()) {

                /* 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);
	                }
				}
        }

        $tmp_nav[$idcat]["sub"] = $navitems;
        $navitems = $tmp_nav;

        /* Function call */
        nav($parentid);

}  // end function

$sql = "SELECT
            A.idcat,
            C.name,
		    C.public,
       		C.idcatlang
        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() ) {

        /* 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);
        #$db2->next_record();
		$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';
	    
	            $navitems[$db->f("idcat")] = array("idcat"  => $db->f("idcat"),
	                                               "name"   => $db->f("name"),
	  	                        	       "idart"      => getIdart($db->f("startidartlang") ),        
                                                                           "target" => $target,
                                                                           "public" => $db->f("public"),
		            					           "idcatlang" => $db->f("idcatlang"));
	        }
		}
}

/* Create Navigation Array */
if(($sel_idcat=='')||($sel_idcat=='0')){
    $cApiClient = new cApiClient($client);
    $sel_idcat = $cApiClient->getProperty('navigation', 'idcat_homepage');
}

nav($sel_idcat);

/* Start Output buffer */
ob_start();

foreach ($navitems as $key => $data) {

    /* 1. Navigation level */
	if (checkCatPermission($data['idcatlang'],$data['public'])) {
	    $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'].'&idart='.$data['idart']));

	    $tpl->next();
	    if ($idcat == $data['idcat']) {
	        $tpl->generate('templates/navfirst_on.html');
		}elseif(is_array($data['sub'])){
	        $tpl->generate('templates/navfirst_open.html');
	    } else {
	        $tpl->generate('templates/navfirst_off.html');
	    }
	
    	/* 2. Navigation level */
	    if (is_array($data['sub'])) {
	        foreach ($data['sub'] as $key => $data) {
				if (checkCatPermission($data['idcatlang'],$data['public'])) {
		            $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'].'&idart='.$data['idart']));
		            $tpl->next();
		            if ($idcat == $data['idcat']) {
		                $tpl->generate('templates/navsecond_on.html');
					}elseif(is_array($data['sub'])){
				        $tpl->generate('templates/navsecond_open.html');
		            } else {
		                $tpl->generate('templates/navsecond_off.html');
		            }

				    /* 3. Navigation level */
		            if (is_array($data['sub'])) {
		                foreach ($data['sub'] as $key => $data) {
							if (checkCatPermission($data['idcatlang'],$data['public'])) {
			                    $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'].'&idart='.$data['idart']));
			                    $tpl->next();
			
			                    if ($idcat == $data['idcat']) {
			                        $tpl->generate('templates/navthird_on.html');
								}elseif(is_array($data['sub'])){
							        $tpl->generate('templates/navthird_open.html');
			                    } else {
			                        $tpl->generate('templates/navthird_off.html');
			                    }

			                    /* 4. Navigation level */
					            if (is_array($data['sub'])) {
					                foreach ($data['sub'] as $key => $data) {
										if (checkCatPermission($data['idcatlang'],$data['public'])) {
						                    $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'].'&idart='.$data['idart']));
						                    $tpl->next();
						                    if ($idcat == $data['idcat']) {
						                        $tpl->generate('templates/navfourth_on.html');
											}elseif(is_array($data['sub'])){
										        $tpl->generate('templates/navfourth_open.html');
						                    } else {
						                        $tpl->generate('templates/navfourth_off.html');
						                    }

						                    /* 5. Navigation level */
								            if (is_array($data['sub'])) {
								                foreach ($data['sub'] as $key => $data) {
													if (checkCatPermission($data['idcatlang'],$data['public'])) {
									                    $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'].'&idart='.$data['idart']));
									                    $tpl->next();
									                    if ($idcat == $data['idcat']) {
									                        $tpl->generate('templates/navfifth_on.html');
									                    } else {
									                        $tpl->generate('templates/navfifth_off.html');
									                    }
										            } // end if
								                } // end foreach
								            } // end if
							            } // end if
					                } // end foreach
					            } // end if
				            } // end if
		                } // end foreach
		            } // end if
	            } // end if
	        } // end foreach
	    } // end if
    } // end if
} // end foreach

/* Read out buffer */
$html = ob_get_contents();

/* Clean buffer */
ob_end_clean();

/* Output buffer-contents */
echo $html;
?>
Leider hat es bei mir nicht funktioniert.
Ich bekomme keinen fehler, der rewrite funktioniert ganz normal, anur leider wird mir der Artikelname .html nicht angezeigt...

Wenn mir irggendjemand helfen könnte, wäre ich überaus dankbar, weil ich die Suche Funktion jetzt shon ne ganze Weile gequält habe und einfach nicht mehr weiter weiss....

Danke im vorraus !!

cruncher
Beiträge: 23
Registriert: Mi 18. Jan 2006, 11:55
Kontaktdaten:

fehler mit php 5

Beitrag von cruncher » Di 16. Jan 2007, 20:13

Hallo Leute

Ich hab ein Problem. Mein Provider hat auf php 5 umgestellt. Seit da hab ich mit der modrewrite schwierigkeiten.

die Startseite wird normal angezeigt. Sobald ich eine andere Seite aufrufe erscheint die Fehlermeldung:

Code: Alles auswählen

Warning: file_put_contents(/home/www/web/html/meinserver/cms/cache/locationstring-url-cache-1.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web/html/meinserver/contenido/includes/functions.pathresolver.php on line 382
und mein ganzes Layout ist futsch.

Sobald ich in den Mandanteneinstellungen das mod rewrite deaktiviere sind die Fehlermeldungen weg.

Kennt jemand das problem oder kann mir helfen?

Vielen Dank

Gruss

cruncher

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

Beitrag von stese » Di 16. Jan 2007, 20:16

jo die fehlermeldung sagt doch eigentlich alles:

die datei
/home/www/web/html/meinserver/cms/cache/locationstring-url-cache-1.txt
ist schreibgeschützt oder kann nicht beschrieben werden. wahrscheinlich wurden bei der umstellung die rechte verändert - die txt datei einfach löschen (wird danach wieder neu erstellt) und sicherstellen dass das cache verzeichnis beschreibbar ist. wenn nicht wirst du eh noch ganz andere probleme haben (ich sage nur pseudocrons und große statistiktabellen).

also bitte mit der rechteverteilung des cms auseinandersetzen.


@macfive
das modul schaut eigentlich korrekt aus. du hast nicht zufällig irgend ein anderes modul am laufen, was ob_start und ob_end nutzt? das führt dann zu fehlern

JochBec
Beiträge: 54
Registriert: Sa 18. Dez 2004, 15:11
Kontaktdaten:

Korrekte Pfadangabe für Unterverzeichnis

Beitrag von JochBec » Di 16. Jan 2007, 21:08

Grundsätzlich funktionert das MR bei mir klasse. Aber ich will den Pfad verkürzen und kriege es nicht hin.

Benutze ich die Hauptdomain auf dem Server ist alles bestens:

http://www.hauptdomain.de/unterverzeich ... tenido/cms

Nun möchte ich aber eine andere Domain auf das Unterverzeichnis routen:

http://www.alias.de
= http://www.hauptdomain.de/unterverzeich ... tenido/cms

Wenn ich das ohne MR mache, bekomme ich ein tadellos funktionierendes CMS mit Links nach dem Schema:

http://www.alias.de/frontcontent.php?567657

Mit MR funzt es aber nicht. Ich bekomme zwar korrekte Links angezeigt, aber sie werden nicht gefunden. Beim Mouseover sehe ich also den Pfad:

http://www.alias.de/kategorie/artikel.html

Beim Klicken wird die Seite aber nicht gefunden.

Jemand eine Idee was falsch läuft?

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

Beitrag von stese » Di 16. Jan 2007, 21:48

die htaccess liegt im mandantenverzeichnis? darin ist die rewrite base auskommentiert? in der config.php ist bei den mr settings das rootdir auf "/" gestellt?

macfive
Beiträge: 2
Registriert: Di 16. Jan 2007, 16:06
Kontaktdaten:

Beitrag von macfive » Mi 17. Jan 2007, 10:00

hm, welches modul könnte denn das benutzen, ich hab nur ein druckmodul drin das mr und sonst eigentlich nur die standard module des beispielmandanten, keine ahnung, ob dort etwas in der art verbaut ist.

das kuriose ist wie gesagt, dass es bei der hilfsnavi und mittlerweile auch bei der BottomNavi ja einwandfrei funktioniert :shock:

Vielleicht leigt es auch an der functions.navigation.php

hier der code:

Code: Alles auswählen

<?php
// create Navigation array for one level
function createNavigationArray($start_id, $db)
{
   cInclude("classes","class.frontend.permissions.php");
   cInclude("classes","class.frontend.groups.php");
   cInclude("classes","class.frontend.users.php");
    global $user, $cfg, $client, $lang, $auth;
   
    $navigation = array();
   $FrontendPermissionCollection = new FrontendPermissionCollection;

    $sql = "SELECT
                A.idcat,
                C.name,
                C.public,
                C.idcatlang,
                C.startidartlang
            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  = '$start_id'
            ORDER BY
                A.idtree";
    $db->query($sql);

    while($db->next_record())
    {   
       $cat_id = $db->f("idcat");
       $cat_idlang = $db->f("idcatlang");
       $startidartlang = $db->f("startidartlang");
      $visible=false;
     

     
      if($db->f("public")!=0){
         $visible = true;
      }elseif(($auth->auth['uid']!='')&&($auth->auth['uid']!='nobody')){
         $FrontendGroupMemberCollection = new FrontendGroupMemberCollection;

         $FrontendGroupMemberCollection->setWhere("idfrontenduser",$auth->auth['uid']);
         $FrontendGroupMemberCollection->query();
         $groups = array();
         while ($member = $FrontendGroupMemberCollection->next()){
               $groups[] = $member->get("idfrontendgroup");
         }
      }
      if(count($groups)>0){
         for($i=0;$i<count($groups);$i++){
            if($FrontendPermissionCollection->checkPerm($groups[$i],'category','access',$cat_idlang, true)){
               $visible=true;
            }
         }
      }
      if($visible){
     
      $db2 = new DB_Contenido;     
        $sql2 = "SELECT
                    a.idart
                FROM
                    ".$cfg["tab"]["art_lang"]." AS a
                WHERE
                    a.idartlang     = '".$startidartlang."'";

        $db2->query($sql2);   
       
        while($db2->next_record()){
           
           $idart =  $db2->f("idart");
           
        }
         
         
         
         $navigation[$cat_id] = array("idcat"  => $cat_id,
                                         "name"   => $db->f("name"),
                                         "target" => '_self', # you can not call getTarget($cat_id, &$db) at this point with the same db instance!
                                         "idart" => $idart,   
                                         "public" => $db->f("public"));
      }   
    } // end while

    $db->free();
    $db2->free();   

    return  $navigation;
}


/**
 * Return target of a given category id
 */
# deprecated
function getTarget($cat_id, $db) {
   
   global $cfg, $client, $lang;

    $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     = '".$cat_id."' AND
                c.idclient  = '".$client."' AND
                c.idcat     = b.idcat AND
                a.idart     = b.idart AND
                a.idlang    = '".$lang."'";

           $db->query($sql);
           $db->next_record();

           $target = ( $db->f('ext') == 0 ) ? '_self' : '_blank';
           
   $db->free();
   return $target;
}

/**
 * Return true if $parentid is parent of $catid
 */

function isParent($parentid, $catid, $db) {

   global $cfg, $client, $lang;

   $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   = '".$catid."'";

   $db->query($sql);
   $db->next_record();
   
   //echo "<pre>"; echo $sql; echo "</pre>";

   $pre = $db->f("parentid");
   
   if($parentid == $pre)
   {
      return true;
   }
   else
   {
      return false;
   }
}

function getParent($preid, &$db) {

   global $cfg, $client, $lang;

   $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   = '".$preid."'";

   $db->query($sql);
   
   if ($db->next_record())
   {
      return $db->f("parentid");
   }else
   {
      return false;
   }

}

function getLevel($catid, &$db)
{

   global $cfg, $client, $lang;

   $sql = "SELECT
            level
         FROM
            ".$cfg["tab"]["cat_tree"]."
         WHERE
            idcat = '".$catid."' ";
           
   $db->query($sql);

   if ($db->next_record())
   {
      return $db->f("level");
   }else
   {
      return false;
   }
   
}


/**
 * Return path of a given category up to a certain level
 */
function getCategoryPath($cat_id, $level, $reverse = true, &$db) {

   $root_path = array();

   array_push($root_path, $cat_id);

   $parent_id = $cat_id;
   
   while (getLevel($parent_id, $db) != false AND getLevel($parent_id, $db) > $level AND getLevel($parent_id, $db) >= 0)
   {
   
      $parent_id = getParent($parent_id, $db);
      if ($parent_id != false)
      {
         array_push($root_path, $parent_id);
      }
     
   }
   
   if ($reverse == true)
   {
      $root_path = array_reverse($root_path);
   }
   
   return $root_path;
   
}


/**
 * Return location string of a given category
 */
function getLocationString($iStartCat, $level, $seperator, $sLinkStyleClass, $sTextStyleClass, $fullweblink = false, $reverse = true, $mod_rewrite = true, $db)
{
   global $sess, $cfgClient, $client;
   
   $aCatPath = getCategoryPath($iStartCat, $level, $reverse, $db);
   
   #print_r($aCatPath);
   
   if(is_array($aCatPath) AND count($aCatPath) > 0)
   {
      $aLocation = array();
      foreach($aCatPath as $value)
      {
         if (!$fullweblink)
         {
            if ($mod_rewrite == true)
            {
               $linkUrl = $sess->url("index-a-$value.html");
            }else
            {
               $linkUrl = $sess->url("front_content.php?idcat=$value");
            }
         }else
         {   
            if ($mod_rewrite == true)
            {
               $linkUrl = $sess->url($cfgClient[$client]["path"]["htmlpath"] . "index-a-$value.html");
            }else
            {
               $linkUrl = $sess->url($cfgClient[$client]["path"]["htmlpath"] . "front_content.php?idcat=$value");
            }
         }
         #$linkUrl = $sess->url("index-a-$idcat.html");
         $name = getCategoryName($value, $db);
         $aLocation[] = '<a href="'.$linkUrl.'" class="'.$sLinkStyleClass.'"><nobr>'.$name.'</nobr></a>';
     
      }
   }
   
   $sLocation = implode($seperator, $aLocation);
   $sLocation = '<span class="'.$sTextStyleClass.'">'.$sLocation.'</span>';
   
   
   return $sLocation;   
}


/**
 *
 * get subtree by a given id
 *
 * @param int $idcat Id of category
 * @return array Array with all deeper categories
 *
 * @copyright four for business AG <www.4fb.de>
 */
 
function getSubTree($idcat_start, $db)
{
    global $client, $cfg;

    $sql = "SELECT
                B.idcat, A.level
            FROM
                ".$cfg["tab"]["cat_tree"]." AS A,
                ".$cfg["tab"]["cat"]." AS B
            WHERE
                A.idcat  = B.idcat AND
                idclient = '".$client."'
            ORDER BY
                idtree";
               
    #echo "<pre>$sql</pre>";

    $db->query($sql);

    $i = false;

    while ( $db->next_record() ) {

        /*if ($db->f("parentid") < $idcat_start) {        // ending part of tree
            $i = 0;  //echo "parent<<br>";
        }
       
        if ($db->f("idcat") == $idcat_start) {        // starting part of tree
            $i = 1; //echo "idcat ==<br>";
        }*/
     
      if ($db->f("idcat") == $idcat_start)
         {
            $curLevel = $db->f("level");
            $i = true;
         } else
         {
            if ($db->f("level") <= $curLevel)
            { // ending part of tree
               $i = false;
            }
         }
       
        if ($i == true) { //echo "true"; echo $db->f("idcat"); echo "<br>";
            $deeper_cats[] = $db->f("idcat");
        }
       
    }
    return $deeper_cats;
}

function getTeaserDeeperCategories($iIdcat, $db)
{
   global $client, $cfg, $lang;
   
   $sql = "SELECT
               B.parentid, B.idcat
            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
            C.visible = '1' AND
                B.idclient = $client
            ORDER BY
                idtree";
   $db->query($sql);

    $i = false;

    while ( $db->next_record() ) {

        /*if ($db->f("parentid") < $iIdcat) {        // ending part of tree
            $i = 0;  //echo "parent<<br>";
        }
       
        if ($db->f("idcat") == $iIdcat) {        // starting part of tree
            $i = 1; //echo "idcat ==<br>";
        }*/
     
      if ($db->f("idcat") == $iIdcat)
         {
            $curLevel = $db->f("level");
            $i = true;
         } else
         {
            if ($curLevel == $db->f("level"))
            { // ending part of tree
               $i = false;
            }
         }
       
        if ($i == true) { //echo "true"; echo $db->f("idcat"); echo "<br>";
            $deeper_cats[] = $db->f("idcat");
        }
       
    }
    return $deeper_cats;
}

/**
 *
 * get subtree by a given id, without protected and invisible categories
 *
 * @param int $idcat Id of category
 * @return array Array with all deeper categories
 *
 * @copyright four for business AG <www.4fb.de>
 */
 
function getProtectedSubTree($idcat_start, $db)
{
    global $client, $cfg, $lang;

    $sql = "SELECT
                B.parentid, B.idcat
            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
            C.visible = '1' AND
            C.public = '1' AND
                B.idclient = '".$client."'
            ORDER BY
                idtree";
               
    //echo "<pre>$sql</pre>";

    $db->query($sql);

    $i = false;

    while ( $db->next_record() ) {

       /* if ($db->f("parentid") < $idcat_start) {        // ending part of tree
            $i = 0;  //echo "parent<<br>";
        }
       
        if ($db->f("idcat") == $idcat_start) {        // starting part of tree
            $i = 1; //echo "idcat ==<br>";
        }*/
     
      if ($db->f("idcat") == $idcat_start)
         {
            $curLevel = $db->f("level");
            $i = true;
         } else
         {
            if ($curLevel == $db->f("level"))
            { // ending part of tree
               $i = false;
            }
         }
       
        if ($i == true) { //echo "true"; echo $db->f("idcat"); echo "<br>";
            $deeper_cats[] = $db->f("idcat");
        }
       
    }
    return $deeper_cats;
}



/**
 * Return category name
 */

function getCategoryName($cat_id, &$db) {
   
    global $cfg, $client, $lang;
   
    $sql = "SELECT
                *
            FROM
                ".$cfg["tab"]["cat"]." AS A,
                ".$cfg["tab"]["cat_lang"]." AS B
            WHERE
                A.idcat     = B.idcat   AND
                A.idcat     = '$cat_id' AND
                A.idclient  = '$client' AND
                B.idlang    = '$lang'   
         ";

   //echo "<pre>$sql</pre>";

    $db->query($sql);
       
    if ($db->next_record())
    {           
       $cat_name = $db->f("name");
       return  $cat_name;
    }
    else
    {   
       return '';
    }
   
} // end function

// get direct subcategories of a given category
function getSubCategories($parent_id, $db) {

    $subcategories = array();

    global $cfg, $client, $lang;

    $sql = "SELECT
                A.idcat
            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
      C.public   = '1'       AND
                B.parentid  = '$parent_id'
            ORDER BY
                A.idtree";

    $db->query($sql);

   //echo "<pre>$sql</pre>";

    while ( $db->next_record() ) {

        $subcategories[] = $db->f("idcat");

    } // end while

    return  $subcategories;

} // end function


// get direct subcategories with protected categories
function getProtectedSubCategories($parent_id, $db) {

    $subcategories = array();
    unset($subcategories);

    global $cfg, $client, $lang;

    $sql = "SELECT
                A.idcat
            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
                B.parentid  = '$parent_id'
            ORDER BY
                A.idtree";

    $db->query($sql);

//echo "<pre>$sql</pre>";

    while ( $db->next_record() ) {

        $subcategories[] = $db->f("idcat");

    } // end while

    return  $subcategories;

} // end function

function checkCatPermission($idcatlang,$public) {
   #Check if current user has permissions to access cat

   cInclude("classes","class.frontend.permissions.php");
   cInclude("classes","class.frontend.groups.php");
   cInclude("classes","class.frontend.users.php");
   
   global $auth;

   $FrontendPermissionCollection = new FrontendPermissionCollection;

   $visible=false;
   if($public!=0){
      $visible = true;
   }elseif(($auth->auth['uid']!='')&&($auth->auth['uid']!='nobody')){
      $FrontendGroupMemberCollection = new FrontendGroupMemberCollection;
      $FrontendGroupMemberCollection->setWhere("idfrontenduser",$auth->auth['uid']);
      $FrontendGroupMemberCollection->query();
      $groups = array();
      while ($member = $FrontendGroupMemberCollection->next()){
         $groups[] = $member->get("idfrontendgroup");
      }
   }
   if(count($groups)>0){
      for($i=0;$i<count($groups);$i++){
         if($FrontendPermissionCollection->checkPerm($groups[$i],'category','access',$idcatlang, true)){
            $visible=true;
         }
      }
   }
   
   return $visible;
}
?>

tomhuber
Beiträge: 1
Registriert: Di 23. Jan 2007, 15:21
Kontaktdaten:

Beitrag von tomhuber » Di 23. Jan 2007, 15:40

Hallo,

danke für dieses modul, geht sehr gut. ein kleines problem hab ich noch, vielleicht hat jemand einen tip.

derzeit schauen meine links so aus:

http://192.168.2.201/cms_internet/en/products/

Ziel ist, das die links so ausschauen:
http://192.168.2.201/en/products/

am debian server mit apache2 liegt die installation am /var/www/cms_internet/.

danke für jeden tip,
lg, tom

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

Beitrag von MyAccount » Fr 26. Jan 2007, 00:31

Habe soeben ein Update von der 4.6.8MR auf die aktuelle 4.6.15. Saubere Arbeit. Gefällt mir gut.

Ich habe allerdings bei diesem riesigen Thread den Faden verloren. Mir ist nämlich aufgefallen, dass ich irgendwann einmal die Funktion getIdart() in die Datei cms/functions.navigation.php eingebaut habe.

Code: Alles auswählen

if (!function_exists("getIdart") ) {
  function getIdart ( $idartlang ) {
    global $cfg;
    
    $db = new DB_Contenido;
    $sql = "SELECT idart FROM " . $cfg["tab"]["art_lang"] . " WHERE idartlang = '" . (int)$idartlang . "'";
    $db->query($sql);
    $db->next_record();
    
    return (int)$db->f("idart");
  }
}
Jetzt bin ich mir nicht mehr sicher. Hatte diese Funktion etwas mit ModRewrite zu tun?

Die Dateiendung .html fehlt auch. Ist das so gewünscht, oder hat sich bei mir ein Fehler eingeschlichen?

Gruß und jute Nacht

MyAccount

Gesperrt