Artikel Navigation: Reihenfolge umkehren

Gesperrt
stefkey
Beiträge: 556
Registriert: Mi 19. Okt 2005, 16:10
Wohnort: Heidelberg
Kontaktdaten:

Artikel Navigation: Reihenfolge umkehren

Beitrag von stefkey »

Hallo,

ich habe hier ein Modul, weiß nicht mehr woher hier im Forum :-(

Ich möchte aber die Reihenfolder der Navigationspunkte umkehren. Ich habe schon mal mit DESC an verschiedenen stellen probiert, jedoch erfolglos weil ich einfach keine php Kenntnisse habe. Kann mir jemand helfen? Hier der Modulcode:

Code: Alles auswählen

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

#Select tree
?>
<table cellspacing="0" cellpadding="0" cellpadding="4">
    <tr>
        <td class="text"><?php echo mi18n("Baum wählen");?>:</td>
        <td>
            <select name="CMS_VAR[0]">
            <option value="0">-- <?php echo mi18n("kein");?> --</option>
            <?php
                $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
                            C.idlang    = '".$lang."' AND
                            B.idclient  = '".$client."' AND
                            C.visible   = 1 AND
                            A.level     = '0'
                        ORDER BY
                            A.idart";

                $db->query($sql);

                while ( $db->next_record() ) {
                    if ( "CMS_VALUE[0]" == $db->f("idcat") ) {
                        echo '<option selected="selected" value="'.$db->f("idcat").'">'.$db->f("name").'</option>';
                    } else {
                        echo '<option value="'.$db->f("idcat").'">'.$db->f("name").'</option>';
                    }
                }
            ?>
            </select>
        </td>
    </tr>
</table>
<?php

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
************************************************/


#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");

#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 catIsChildOf2($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 ( catIsChildOf2($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 nav2($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
                        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"),
                                                                        "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 */
        nav2($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"),
                                                   "public" => $db->f("public"),
                                                   "idcatlang" => $db->f("idcatlang"),
                                                   "target" => $target);
            }
        }
}

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

nav2($sel_idcat);

/* Start Output buffer */
ob_start();


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

    /* 1. Navigation level */
    if (checkCatPermission($data['idcatlang'],$data['public'])) {


             //
          // Auslesen der Artikel-headlines in der Kategorie MIT Startartikel
          //
           if ($idcat == $data['idcat']) {
          $artikelListe = new ArticleCollection(array("idcat"=>$data['idcat'],"start"=>true));
          $artikelCounter = $artikelListe->count;
         
          if ($artikelCounter > 0) {
          
          while ($artikel = $artikelListe->nextArticle()) 
          { 
          $tpl->reset();
          $artikelID = $artikel->get('idart');
             $tpl->set('d', 'NAME', $artikel->get("title")); 
         $tpl->set('d', 'TARGET', $data['target']);
            $tpl->set('d', 'HREF',  $sess->url('front_content.php?client='.$client.'&lang='.$lang.'&idart='.$artikelID.'&idcat='.$data['idcat']));
            $tpl->next();
            
          if ($idart == $artikelID) {
                   $tpl->generate('templates/navsecond_on.html');
                     }
                  else {
                   $tpl->generate('templates/navsecond_off.html');
                 }
             }
             
             } 
             }
    

    } // end if
} // end foreach

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

/* Clean buffer */
ob_end_clean();

/* Output buffer-contents */
echo '<ul>'; 
echo $html;
echo '</ul>'; 

?>
McHubi
Beiträge: 1223
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Artikel Navigation: Reihenfolge umkehren

Beitrag von McHubi »

Äh ...

... mal ganz dumm gefragt: Warum machst Du das nicht über die Kategorien? Die kannst Du doch beliebig sortieren. Oder soll die Reihenfolge der Navigationspunkte in einem Artikel mal so rum und in einem anderen mal andersrum sein?
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)
stefkey
Beiträge: 556
Registriert: Mi 19. Okt 2005, 16:10
Wohnort: Heidelberg
Kontaktdaten:

Re: Artikel Navigation: Reihenfolge umkehren

Beitrag von stefkey »

Für den Seitenbearbieter ist es mit Artikeln einfacher.
Er erstellt einen neuen Artikel und ein andermal löscht er einen ohne zuerst die Kategorien zu organisieren.

Ich denke ich muss am Ende das Artikelfeld noch mal Rückwärts in eine neue Variable schreiben bevor die Artikel ausgelesen werden.
Aber wie geht das?!?

Kannst du mir helfen?

Grüße,
stefkey
McHubi
Beiträge: 1223
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Artikel Navigation: Reihenfolge umkehren

Beitrag von McHubi »

Äh...
...werde aus dem was Du schreibst, nicht ganz schlau. Lass mich mal veranschaulichen was ich verstanden habe aus Deinem ersten Post:

Anstatt

* Hauptpunkt A
- Unterpunkt a
- Unterpunkt b
- Unterpunkt c
- Unterpunkt d
- Unterpunkt e
- Unterpunkt f

möchtest Du

* Hauptpunkt A
- Unterpunkt f
- Unterpunkt e
- Unterpunkt d
- Unterpunkt c
- Unterpunkt b
- Unterpunkt a

haben. Oder?

Was meinst Du mit "Artikelfeld"? In Verbindung mit "Er erstellt einen neuen Artikel und ein andermal löscht er einen..." würde ich eher in Richtung Artikelliste tippen, oder?
Kannst du mir helfen?
Mach ich doch schon... :mrgreen:
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)
stefkey
Beiträge: 556
Registriert: Mi 19. Okt 2005, 16:10
Wohnort: Heidelberg
Kontaktdaten:

Re: Artikel Navigation: Reihenfolge umkehren

Beitrag von stefkey »

ja genau,

neuer Artikel erscheinen als erstes in der Liste, also so:

Artikel 3
Artikel 2
Artikel 1

Ich möchte es aber so:

Artikel 1
Artikel 2
Artikel 3
...

Ich meine im Modul wird ja eine Variable mit den Artikel IDs gefüllt, nennt man das nicht "Feld"?
Und dieses Feld müsste man umkehren. Das kann man doch mit dem 2-Zeiler programmieren, oder?

Grüße,
stefkey
McHubi
Beiträge: 1223
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Artikel Navigation: Reihenfolge umkehren

Beitrag von McHubi »

Du möchtest, dass die NAVIGATION so aussieht oder eine ARTIKELLISTE?
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)
stefkey
Beiträge: 556
Registriert: Mi 19. Okt 2005, 16:10
Wohnort: Heidelberg
Kontaktdaten:

Re: Artikel Navigation: Reihenfolge umkehren

Beitrag von stefkey »

Ich möchte keine Artikelliste nutzen. Nur eben eine simple Navigation.
Oben das Modul macht ja schon fast alles, nur eben noch nicht in der richtigen Reihenfolge.
Eine Artikelliste zeigt nie den aktiven Artikel an, sonst hätte ich mir damit beholfen.

Hast du eine Lösung für oben den Code?

Grüße,
stefkey
McHubi
Beiträge: 1223
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Artikel Navigation: Reihenfolge umkehren

Beitrag von McHubi »

Eine Artikelliste zeigt nie den aktiven Artikel an
:?: Was verstehst Du unter "aktiver Artikel"? Den zuletzt erstellten? Ich wüsste nicht warum eine Artikelliste diesen nicht anzeigen sollte (Es sei denn, er wäre nicht online - und würde damit also völlig korrekt nicht angezeigt). Schau Dir mal die Article List Advanced an: http://forum.contenido.org/viewtopic.ph ... t+advanced
Mit der kannst Du sortieren wie Du lustig bist...

Edit: Seh grade, da biste ja auch schon dabei... :D

Oder meinst Du, wenn Du auf einen gelisteten Artikel klickst, das dann die Artikelliste verschwindet und an deren Stelle der angeklickte Artikel erscheint? Hier wäre es dann so, dass Du an der Stelle einer Navigation die Artikelliste einbinden würdest und auf das Minimum - sprich die Headline - reduzierst. Sagen wir mal Du bindest sie im Layout auf der linken Seite ein. Klickst Du auf einen der Links, erscheint der Artikel im rechten Bereich und die Artikelliste wird weiterhin angezeigt. Sie wird also wie eine Navigation im Template eingebunden und ständig angezeigt. Sollte doch funktionieren. Gibt eigentlich keinen Grund, warum die Artikelliste den "aktiven" Artikel jetzt nicht mehr listen sollte...

Womit Du bei einer Artikelliste wohl an Grenzen stoßen dürftest ist das Thema aufklappen und Ebenen. Denn das ist nunmal Sache einer Navigation.

Wenn ich Dich richtig verstehe, möchtest Du eine Navigation, die wie eine Artikelliste funktioniert? Ich wüsste nicht wie man eine Navigation so umstricken kann dass sie wie eine Artikelliste funktioniert - sprich nicht die Kategorien ausgibt sondern Artikel innerhalb einer Kategorie und diese dann wie eine Artikelliste ausgibt... Oder willst Du, dass bei Anlage eines Artikels gleichzeitig eine Kategorie angelegt wird? Das widerspräche aber dem festgelegten Workflow...

Was ist denn so schlimm daran, die Reihenfolge der Kategorien unter "Content/ Kategorien" zu ändern? Okay, es ist ein Arbeitsschritt mehr... aber das ist ja nun auch kein Weltuntergang und im Vergleich zum Bau eines "Zwitters" Navigationsartikelliste nen Klacks.

Es sei denn, irgendjemand im Forum hat sowas schonmal umgesetzt. Kann mich ja irren, aber ich glaube nicht das schonmal einer einen Hund mit ner Katze gekreuzt hat... :wink:
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)
Gesperrt