Artikel auf Startseite setzen

derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Artikel auf Startseite setzen

Beitrag von derju »

Guten Morgen

Ich schreibe gerade an einem Modul welches jeden Artikel als News auf die Startseite setzen lässt.
Will ich einen Srtikel auf die Startseite setzen wähle ich in der Artikel Konfiguration auf Startseite setzen:

Code: Alles auswählen

<input type="checkbox" name="CMS_VAR[1]" value="start"<?php echo ($aSettings['showall']?' checked="checked"':'');?>>
Jetzt will ich das News Modul so abändern das nur die Artikel die in CMS_VAR[1] start stehen haben aufgelistet werden.

Wie komme ich aus dem Newsmodul an die Variable CMS_VAR[1] der Artikel?

LG - derJu
Contenido 4.8.20 | Contenido 4.9.12
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Artikel auf Startseite setzen

Beitrag von Spider IT »

Hallo derJu,

soweit ich weiß gar nicht.
Du könntest aber diese Angabe in den Modul-Output verpflanzen, um ihn in den Editor zu zeigen:

Code: Alles auswählen

<?php
# Show a html select in edit mode, the selected value in frontend
$oArt = new Article($idart, $client, $lang, $idartlang);
$selected = $oArt->getContent('CMS_TEXT', 1001);
if ($edit) {
    if (isset($_POST['mySwitchValue'])) {
        # Wert speichern
        conSaveContentEntry($idartlang, 'CMS_TEXT', 1001, $_POST['mySwitchValue']);
        $selected = $_POST['mySwitchValue'];
    }
?>
    <input type="checkbox" id="mySwitch" name="mySwitch" value="start" onchange="saveSwitch()"<?php (($selected == 'start') ? 'checked="checked"' : ''); ?> />
    <script type="text/javascript">
    //<![CDATA[
        function saveSwitch() {
            var f = document.forms['editcontent'];
            var s = ((document.getElementById('mySwitch').selected) ? 'start' : '');
            var c = document.createElement('input');
            c.type = 'hidden';
            c.name = 'mySwitchValue';
            c.value = s;
            f.appendChild(c);
            f.submit();
        }
    //]]>
    </script>
<?php
}
?>
Im Newsmodul wird mit der Objektvariable $article gearbeitet, über diesen kannst du jedes Feld der Artikel abfragen.
In diesem Fall wäre das dann

Code: Alles auswählen

if ($article->getContent('CMS_TEXT', 1001) == 'start') {
Damit kannst du dann den Artikel, falls er ausgegeben werden soll, ausgeben (also die Ausgabe in diese Verzweigung einsetzen).
Bedenke aber, dass du dann die Prüfung der eingestellten Anzahl auszugebender Artikel nach unten verschieben musst, da die nicht ausgegebenen Artikel nicht mitgezählt werden dürfen.

Gruß
René
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Artikel auf Startseite setzen

Beitrag von derju »

Hallo René

Danke für deine Antwort, leider ist das Newsmodul von Contenido beschränkt auf eine Kategorie und ich benötige es für alle Artikel aus allen Kategorien.

LG - derJu
Contenido 4.8.20 | Contenido 4.9.12
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Artikel auf Startseite setzen

Beitrag von Spider IT »

Hallo derJu,

ich habe lediglich deine Frage beantwortet, du wolltest die jeweilige Einstellung im Newsmodul auslesen können.

Um das Newsmodul zu erweitern, musst du die Funktion conDeeperCategoriesArray() nutzen, um alle Kategorien innerhalb der aktuellen Kategorie aufzulisten.
Damit kannst du dann je Kategorie wieder die Funktionalität der Newsliste nutzen.

Gruß
René
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Artikel auf Startseite setzen

Beitrag von derju »

Hallo René

Genau, danke nochmals.

Gibt es für conDeeperCategoriesArray() irgentwo ein Beispiel?

LG - derJu
Contenido 4.8.20 | Contenido 4.9.12
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Artikel auf Startseite setzen

Beitrag von Spider IT »

Keine Ahnung, aber es ist denkbar einfach anzuwenden.
Du übergibst der Funktion eine idcat und kriegst ein Array mit den darin enthaltenen idcats zurück (eine Ebene).
Also, wenn "Hauptnavigation" die idcat 1 hat und darin die Kategorien wie folgt liegen

Code: Alles auswählen

 - Contenido (idcat = 2)
 - Erste Schritte (idcat = 3)
 - Features (idcat = 4)
 - - Navigation (idcat = 5)
 - - Content (idcat = 6)
 - - - News (idcat = 7)
 - - - Bildergalerie (idcat = 8)
 - - Geschlossener Bereich (idcat = 9)
 - - - Vertraulich (idcat = 10)
 - Der Experte (idcat = 11)
 - Services (idcat = 12)
 - - Hosting (idcat = 13)
liefert dir

Code: Alles auswählen

$aIdcats = conDeeperCategoriesArray(1);
ein Array mit idcats 2, 3, 4, 11, 12.

Gruß
René
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Artikel auf Startseite setzen

Beitrag von derju »

Danke, hat super geklappt.

Ein Kleines Problem hab ich noch, in der Artikel Konfiguration hab ich eine checkbox das Auswählen funktioniert.
Wenn ich jetzt die checkbox abwählen will funktioniert das nicht, und ich hab keine Ahnung wo der Fehler liegt habe es mit dem Newsmodul verglichen (#Include start article):

Code: Alles auswählen

?><?php
if ("CMS_VALUE[3]" != '') {
    $start = ' checked';
} else {
    $start = '';
}
echo '<table cellpadding="0" cellspacing="0" border="0">';
#Include start article
echo '
        <tr>
          <td class="text_medium" style="padding:5px;">'.mi18n("Artikel auf Startseite setzen").':</td>
          <td style="padding:5px;"><input type="checkbox" name="CMS_VAR[3]" value="start" checked></td>
          '.$start.'
        </tr>';

echo '</table>';
?><?php
LG - derJu
Contenido 4.8.20 | Contenido 4.9.12
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Artikel auf Startseite setzen

Beitrag von derju »

Danke, hat super geklappt.

Ein Kleines Problem hab ich noch, in der Artikel Konfiguration hab ich eine checkbox das Auswählen funktioniert.
Wenn ich jetzt die checkbox abwählen will funktioniert das nicht, und ich hab keine Ahnung wo der Fehler liegt habe es mit dem Newsmodul verglichen (#Include start article):

Code: Alles auswählen

?><?php
if ("CMS_VALUE[3]" != '') {
    $start = ' checked';
} else {
    $start = '';
}
echo '<table cellpadding="0" cellspacing="0" border="0">';
#Include start article
echo '
        <tr>
          <td class="text_medium" style="padding:5px;">'.mi18n("Artikel auf Startseite setzen").':</td>
          <td style="padding:5px;"><input type="checkbox" name="CMS_VAR[3]" value="start" '.$start.'></td>
        </tr>';

echo '</table>';
?><?php
LG - derJu
Contenido 4.8.20 | Contenido 4.9.12
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Artikel auf Startseite setzen

Beitrag von Spider IT »

Versuch es doch mal mit

Code: Alles auswählen

if ("CMS_VALUE[3]" == 'start') {
    $start = ' checked';
} else {
    $start = '';
}
Allerdings löst das nicht dein Problem aus deine Frage im ersten Post, wofür meine Lösung war, diese Checkbox mittels ein eigenes Modul in den Contentbereich zu verpflanzen.

Gruß
René
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Artikel auf Startseite setzen

Beitrag von derju »

Das bringt auch nichts.

Das Problem aus dem ersten Post ist gelöst nur die checkbox will noch nicht.

Für mich gehört das in die Konfiguration und nicht in den Contentbereich.

LG - derJu
Contenido 4.8.20 | Contenido 4.9.12
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Artikel auf Startseite setzen

Beitrag von Spider IT »

Ich kann mir nur vorstellen, dass es nicht funktioniert weil NUR die Checkbox in der Konfig ist, dadurch wird beim Deaktivieren nichts an das Modul geschickt und das Speichern auch nicht ausgelöst.
Pack doch mal ein input type="hidden" mit anderem CMS_VAR mit rein und schau ob das dann geht (ein input, auch hidden, schickt immer Daten).
Bei mir funktioniert es sonst in allen Modulen, aber da sind immer auch Eingabefelder mit dabei.

Gruß
René
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Artikel auf Startseite setzen

Beitrag von derju »

Hallo René

Vielen Dank, daran hat es gelegen, da muss man erst mal drauf kommen.

LG - derJu
Contenido 4.8.20 | Contenido 4.9.12
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Artikel auf Startseite setzen

Beitrag von derju »

Moin

Gibt es eine Möglichkeit diese Array zu sortieren:

Code: Alles auswählen

$myList->nextArticle()
LG - derJu
Contenido 4.8.20 | Contenido 4.9.12
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Artikel auf Startseite setzen

Beitrag von Spider IT »

Moin,

das Array $myList beinhaltet mehrere Ebenen mit den unterschiedlichsten Angaben, u.A. Datenbankzugangsdaten (warum auch immer), aber zu den Artikeln nur die idarts.
Du kannst aber die Artikelinformationen die du brauchst in ein Array sammeln und das sortieren, z.B. nach Aktualisierungsdatum:

Code: Alles auswählen

# ...
$myArts = array();
for ($i = 0, $n = $myList->count; $i < $n; $i ++) {
    $oArt = $myList->nextArticle();
    $h1 = $oArt->getContent('CMS_HTMLHEAD', 1);
    $h2 = $oArt->getContent('CMS_HTMLHEAD', 2);
    $c1 = $oArt->getContent('CMS_HTML', 1);
    $c2 = $oArt->getContent('CMS_HTML', 2);
    $lm = $oArt->getField('lastmodified');
    $myArts[] = array('h1' => $h1, 'h2' => $h2, 'c1' => $c1, 'c2' => $c2, 'lm' => $lm);
}
$myArray = sitCascadedArraySort($myArray, 'lm', SORT_STRING, SORT_ASC);
# Ausgabe, Werte aus $myArray...

function sitCascadedArraySort() {
    $args = func_get_args();
    $marray = array_shift($args);
    if (count($marray)) {
        $msortline = 'return(array_multisort(';
        foreach ($args as $arg) {
            $i ++;
            if (is_string($arg)) {
                foreach ($marray as $row) {
                    $sortarr[$i][] = $row[$arg];
                }
            } else {
                $sortarr[$i] = $arg;
            }
            $msortline .= '$sortarr['.$i.'],';
        }
        $msortline .= '$marray));';
        eval($msortline);
    }
    return $marray;
}
Gruß
René
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Artikel auf Startseite setzen

Beitrag von derju »

Hallo René

Danke für deine Antwort.

Folgendes Problem habe ich noch:

Code: Alles auswählen

foreach($catIds as $key=>$val) {
    $myList = new ArticleCollection(array("idcat"=>$val, "start" => $start_article, "order"=>"lastmodified", "direction"=>"asc"));
}
$myList gibt so nur ein Wert zurück, ich bekomme es aber nicht hin das sich $myList bei jedem Durchlauf erweitert.

Ist das hier überhaupt möglich?

LG - derJu
Contenido 4.8.20 | Contenido 4.9.12
Gesperrt