Seite 1 von 1

"weiter" und "zurück" links in artikelli

Verfasst: Di 15. Mär 2005, 09:26
von llaron
hallo zusammen,

ich verwende das advanced modrewirte von stese - funktioniert auch einwandfrei :-)

nun habe ich die artikelliste mit bild eingesetzt (von andreas kummer) und müsste wissen, wie ich die "weiter" und "zurück" links zum durchblättern bzw. den link "zurück zur übersicht" bestücken muss, damit sie auf dem modrewirte funktionieren!

anbei der code für die ausgabe:

ausgabe:

Code: Alles auswählen

<?php
##########################################
#
#	artikelliste mit Bild ohne datum
#
##########################################

    // manuelle konfiguration des moduls
    $uploadpfad = "/cms/upload/"; // relativ zum root-verzeichnis (mit slash am anfang und am ende)
    $thumbnailpfad = "/cms/upload/vorschau/"; //relativ zum root-verzeichnis (mit slash am anfang und am ende)

    // konfiguration

    $categorie = "CMS_VALUE[0]";

    $angezeigte_anzahl = "CMS_VALUE[1]";
    if ($angezeigte_anzahl == '') $angezeigte_anzahl = 3;

    $startartikel = "CMS_VALUE[2]";
    if ($startartikel == '') $startartikel = false;

    $subheadline = "CMS_VALUE[3]";
    if ($subheadline == '') $subheadline = 150;

    $navigationslink['previous'] = "CMS_VALUE[4]";
    if ($navigationslink['previous'] == '') $navigationslink['previous'] = '[rückwärts]';

    $navigationslink['next'] = "CMS_VALUE[5]";
    if ($navigationslink['next'] == '') $navigationslink['next'] = '[vorwärts]';

    $ebene = "CMS_VALUE[6]";

    $bildbreite = "CMS_VALUE[7]";

    $limit = (isset($_GET['displaylimit']) && $_GET['displaylimit'] > 0)?($_GET['displaylimit']):(0);

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

    // wenn startartikel true ist, werden die startartikel dargestellt, sonst nicht
    $nurstartartikel = ($startartikel)?(''):('AND d.is_start = 0');

    // liest die anzahl betroffener artikel aus der datenbank
    switch ($ebene) {
        case -2:
            $sql_1 = "
                SELECT count(*) AS anzahl
                FROM {$cfg['tab']['cat']} AS a,
                     {$cfg['tab']['cat']} AS b,
                     {$cfg['tab']['cat']} AS c
                LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
                LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
                WHERE
                    (
                        (
                            c.parentid = b.idcat
                            AND b.parentid = a.idcat
                        )
                        OR
                        (
                            c.idcat = b.idcat
                            AND b.parentid = a.idcat
                        )
                        OR
                        (
                            c.idcat = b.idcat
                            AND b.idcat = a.idcat
                        )
                    )
                    AND a.idcat = $categorie
                    AND e.online = 1
                    AND e.redirect = 0
                    AND e.external_redirect = 0
                    AND e.idlang = $lang
                    $nurstartartikel
                ";
            $sql_2 = "
                SELECT c.idcat, d.idart, e.idartlang, e.created, DATE_FORMAT(e.created,'%d.%m.%y') AS erstellungsdatum
                FROM {$cfg['tab']['cat']} AS a,
                {$cfg['tab']['cat']} AS b,
                {$cfg['tab']['cat']} AS c
                LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
                LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
                WHERE
                    (
                        (
                            c.parentid = b.idcat
                            AND b.parentid = a.idcat
                        )
                        OR
                        (
                            c.idcat = b.idcat
                            AND b.parentid = a.idcat
                        )
                        OR
                        (
                            c.idcat = b.idcat
                            AND b.idcat = a.idcat
                        )
                    )
                    AND a.idcat = $categorie
                    AND e.online = 1
                    AND e.redirect = 0
                    AND e.external_redirect = 0
                    AND e.idlang = $lang
                    $nurstartartikel
                ORDER BY e.created DESC
                LIMIT $limit, $angezeigte_anzahl
                ";
            break;
        case -1:
            $sql_1 = "
                SELECT count(*) AS anzahl
                FROM {$cfg['tab']['cat']} AS a,
                     {$cfg['tab']['cat']} AS b,
                     {$cfg['tab']['cat']} AS c
                LEFT JOIN {$cfg['tab']['cat_art']} AS d ON b.idcat = d.idcat
                LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
                WHERE
                    (
                        (
                            c.idcat = b.idcat
                            AND b.parentid = a.idcat
                        )
                        OR
                        (
                            c.idcat = b.idcat
                            AND b.idcat = a.idcat
                        )
                    )
                    AND a.idcat = $categorie
                    AND e.online = 1
                    AND e.redirect = 0
                    AND e.external_redirect = 0
                    AND e.idlang = $lang
                    $nurstartartikel
                ";
            $sql_2 = "
                SELECT c.idcat, d.idart, e.idartlang, e.created, DATE_FORMAT(e.created,'%d.%m.%y') AS erstellungsdatum
                FROM {$cfg['tab']['cat']} AS a,
                {$cfg['tab']['cat']} AS b,
                {$cfg['tab']['cat']} AS c
                LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
                LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
                WHERE
                    (
                        (
                            c.idcat = b.idcat
                            AND b.parentid = a.idcat
                        )
                        OR
                        (
                            c.idcat = b.idcat
                            AND b.idcat = a.idcat
                        )
                    )
                    AND a.idcat = $categorie
                    AND e.online = 1
                    AND e.redirect = 0
                    AND e.external_redirect = 0
                    AND e.idlang = $lang
                    $nurstartartikel
                ORDER BY e.created DESC
                LIMIT $limit, $angezeigte_anzahl
                    ";
            break;
        case 0:
            $sql_1 = "
                SELECT count(*) AS anzahl
                FROM {$cfg['tab']['cat']} AS a,
                     {$cfg['tab']['cat']} AS b,
                     {$cfg['tab']['cat']} AS c
                LEFT JOIN {$cfg['tab']['cat_art']} AS d ON b.idcat = d.idcat
                LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
                WHERE
                    (
                        (
                            c.idcat = b.idcat
                            AND b.idcat = a.idcat
                        )
                    )
                    AND a.idcat = $categorie
                    AND e.online = 1
                    AND e.redirect = 0
                    AND e.external_redirect = 0
                    AND e.idlang = $lang
                    $nurstartartikel
                ";
            $sql_2 = "
                SELECT c.idcat, d.idart, e.idartlang, e.created, DATE_FORMAT(e.created,'%d.%m.%y') AS erstellungsdatum
                FROM {$cfg['tab']['cat']} AS a,
                {$cfg['tab']['cat']} AS b,
                {$cfg['tab']['cat']} AS c
                LEFT JOIN {$cfg['tab']['cat_art']} AS d ON c.idcat = d.idcat
                LEFT JOIN {$cfg['tab']['art_lang']} AS e ON d.idart = e.idart
                WHERE
                    (
                        (
                            c.idcat = b.idcat
                            AND b.idcat = a.idcat
                        )
                    )
                    AND a.idcat = $categorie
                    AND e.online = 1
                    AND e.redirect = 0
                    AND e.external_redirect = 0
                    AND e.idlang = $lang
                    $nurstartartikel
                ORDER BY e.created DESC
                LIMIT $limit, $angezeigte_anzahl
                    ";
            break;
    }

    $db->query($sql_1);
    $db->next_record();
    $anzahl_artikel = $db->f("anzahl");

    $db->query($sql_2);
    echo '<table cellpadding="0" cellspacing="0" style="width:100%" border="0">';

    while ($db->next_record()) {
        
        $sql = "
            SELECT a.value, a.typeid, b.type, c.filename, c.dirname FROM {$cfg['tab']['content']} AS a
            LEFT JOIN {$cfg['tab']['type']} AS b ON a.idtype = b.idtype
            LEFT JOIN {$cfg['tab']['upl']} AS c ON a.value = c.idupl
            WHERE
            a.idartlang = ".$db->f("idartlang")."
            AND (
                b.type = 'CMS_HTMLHEAD'
                OR b.type = 'CMS_IMG'
            )
            ORDER BY b.type, a.typeid ASC
            ";

        // print "<p>$sql</p>";

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

        $link = $sess->url("front_content.php?client=$client&lang=$lang&idcat=".$db->f("idcat")."&idart=".$db->f("idart"));
		//$link = $sess->url("/$client/$lang/".$db->f("idcat")."/".$db->f("idart").".html");
        echo "<tr>
			<td colspan=\"2\"><img src=\"../../../cms/images/clear.gif\" width=\"1\" height=\"15\" alt=\"spacer\"></td></tr>
		<tr>
		<td valign=\"top\" colspan=\"2\" class=\"text-orange\"><b><a href=\"$link\">".urldecode($db2->f("value"))."</a></b></td></tr>
		<tr>
			<td colspan=\"2\"><img src=\"../../../cms/images/clear.gif\" width=\"1\" height=\"15\" alt=\"spacer\"></td>";
        #echo "<td><!-- ".$db->f("erstellungsdatum")."--></td>
		echo "</tr>";

        $db2->next_record();

        // die subheadline auf die gewünschte länge reduzieren (trennung nur
        // nach bzw. vor einem ganzen wort
        if (strlen($db2->f("value")) > $subheadline) {
            $newsubheadline = '';
            $worte = explode (" ",strip_tags(urldecode($db2->f("value"))));
            $zulang = false;
            foreach ($worte as $wort) {
                if (strlen($newsubheadline." ".$wort) >= $subheadline) $zulang = true;
                $newsubheadline = (!$zulang)?($newsubheadline." ".$wort):($newsubheadline);
            }
            $newsubheadline .= "...";
        } else {
            $newsubheadline = strip_tags(urldecode($db2->f("value")));
        }

        $bild_vorhanden = false;
        while ($db2->next_record()) {
            if ($db2->f("type") == 'CMS_IMG' && $db2->f("typeid") == 1) {
                $bilddateiname = "{$thumbnailpfad}{$bildbreite}_".$db2->f("value").".jpg";
                if (!file_exists($cfg['path']['frontend'].$bilddateiname)) {

                    $src_image_size = getimagesize($cfg['path']['frontend'].$uploadpfad.$db2->f("dirname").$db2->f("filename"));

                    $bildhoehe = round($src_image_size[1] * $bildbreite / $src_image_size[0]);
                    if ($bildhoehe > $bildbreite) {
                        $bildhoehe = $bildbreite;
                        $bildbreite = round($src_image_size[0] * $bildhoehe / $src_image_size[1]);
                    }

                    $dst_im = imagecreatetruecolor($bildbreite,$bildhoehe);

                    if ($src_image_size[2] == 1) {
                        $src_im = imagecreatefromGIF($cfg['path']['frontend'].$uploadpfad.$db2->f("dirname").$db2->f("filename"));
                    } elseif ($src_image_size[2] == 2) {
                        $src_im = @ImageCreateFromJPEG($cfg['path']['frontend'].$uploadpfad.$db2->f("dirname").$db2->f("filename"));
                    } else {
                        $src_im = imagecreatefromgd($cfg['path']['frontend'].$uploadpfad.$db2->f("dirname").$db2->f("filename"));
                    }
                    
                    imagecopyresampled ($dst_im,$src_im,0,0,0,0,$bildbreite,$bildhoehe,$src_image_size[0],$src_image_size[1]);
                    imagejpeg ($dst_im,$cfg['path']['frontend'].$bilddateiname,100);
                }
                $bild_vorhanden = true;
            }
        }

        if ($bild_vorhanden) {
            $width = "CMS_VALUE[7]";
            $width += 5;
            echo "<tr>
			<td valign=\"top\" style=\"width:{$width}px;\" rowspan=2><a href=\"$link\"><img border=\"0\" src=\"$bilddateiname\"></a><br><br></td>
			<td valign=\"top\" class=\"text\">$newsubheadline</td>
			</tr>
			<tr>
				<td valign=\"bottom\" align=\"right\" colspan=\"2\"><a href=\"$link\">weiterlesen <img src=\"../../../cms/images/pfeil-weiter.gif\" height=\"15\" width=\"13\" alt=\"pfeil\" border=\"0\">&nbsp;&nbsp;</a></td>
			</tr>";
			echo "<tr>
				<td height=\"3\" colspan=\"2\"><img src=\"../../../cms/upload/bilder/leistung/trenner.gif\" height=\"3\" width=\"375\" alt=\"spacer\"></td>
			</tr>";
        } else {
            echo "<tr>
			<td valign=\"top\" colspan=\"2\">$newsubheadline</td>
			</tr>
			<tr>
				<td valign=\"bottom\" align=\"right\" colspan=\"2\"><a href=\"$link\">weiterlesen <img src=\"../../../cms/images/pfeil-weiter.gif\" height=\"15\" width=\"13\" alt=\"pfeil\" border=\"0\">&nbsp;&nbsp;</a></td>
			</tr>";
			echo "<tr>
				<td height=\"3\" colspan=\"2\"><img src=\"../../../cms/upload/bilder/leistung/trenner.gif\" height=\"3\" width=\"375\" alt=\"spacer\"></td>
			</tr>";
        }

    }

    echo '</table>';

    if ($limit > 0 || $anzahl_artikel > $limit + $angezeigte_anzahl) {
        echo '<table cellpadding="3" cellspacing="0" style="width:100%" border="0">
		<tr>';
        if ($limit > 0) {
            $displaylimit = ($limit - $angezeigte_anzahl >= 0)?($limit - $angezeigte_anzahl):(0);
            echo "<td style=\"text-align:left\"><a href=\"".$sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$navigationslink['previous']}</a></td>";
        } else {
            echo '<td>&nbsp;</td>';
        }
        if ($anzahl_artikel > $limit + $angezeigte_anzahl) {
            $displaylimit = $limit + $angezeigte_anzahl;
            echo "<td style=\"text-align:right\"><a href=\"".$sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat&idart=$idart&displaylimit=$displaylimit")."\">{$navigationslink['next']}</a></td>";
        } else {
            echo '<td>&nbsp;</td>';
        }
        echo '</tr></table>';
    }
?>
merci im voraus,
nico

Verfasst: Di 15. Mär 2005, 21:19
von emergence
wie sehen denn die transformierten links für weiter und zurück aus ?
oder findet keine transformation bei diesen links statt... ?
oder werden einfach nur gewisse parameter unterschlagen ?

klingt aber eher so als würde das nicht berücksichtigt...
eine anpassung könnte dir wohl nur stese liefern...
innerhalb des moduls wird es wohl nicht gehen...

Verfasst: Mi 16. Mär 2005, 10:17
von stese
ja das liegt an meinem mod rewrite modul. ich werde es die tage dahingehend anpassen, dass "fremdparameter" berücksichtigt werden.

Verfasst: Sa 19. Mär 2005, 08:46
von stese
so, habs geändert.

bitte öffne die datei
/contenido/classes/class.modrewrite.php
suche die funktion
build_new_url ()
(Zeile 407)

und ersetze diese funktion mit nachfolgender:

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;
		
		// 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
damit sollten jetzt alle parameter die nicht idcat, idart, lang, client sind als get-parameter hinten an die url angehangen werden.