Seite 1 von 1

Startartikel mit Zeitsteuerung [4.8.15]

Verfasst: Mo 5. Mär 2012, 16:00
von blackalpha
Hallo liebe Forengemeinde,

ich hatte heute das Problem, das ich Zeitsteuerung und Startartikel kombinieren musste.
Dabei bin ich auf diesen älteren Workaround gestoßen und habe ihn für die Version 4.8.15 kompatibel gemacht.
Gast hat geschrieben:Hallo Leute,

hab da eine Lösung gefunden, die allerdings bedeutet, dass man in die Contenido Dateien "reingreifen" muss. Man erhält dabei ein neues Hakerl für "Zum Startartikel machen" in der Zeitsteuerung - alles andere wie gehabt. In der Datenbank wird in Tabelle con_art_lang das Feld free_use_01 verwendet - daher bitte Vorsicht falls das schon benutzt wird.

Das ganze geht so (bei 4.4.4 getestet und bei 4.4.5 ähnlich):

Code: Alles auswählen

Geänderte Dateien:
contenido/includes/functions.con.php
contenido/includes/include.con_edit_form.php
contenido/templates/standard/template.con_edit_form.php
Ich hoffe ich konnte damit ein wenig helfen.

Viele Grüße

Re: Startartikel mit Zeitsteuerung [4.8.15]

Verfasst: Mi 14. Mär 2012, 15:10
von derSteffen
Hallo,

dass klingt gut. Kurze Frage, die Änderungen in den Dateien, sind diese erkenntlich (durch Kommentare oder ähnlichem). Habe das jetzt nicht gefunden und bei einem Update ist es immer ganz gut, wenn man weiß was man ändern müßte.

Vielen Dank

MfG Steffen

Re: Startartikel mit Zeitsteuerung [4.8.15]

Verfasst: Mi 14. Mär 2012, 16:09
von blackalpha
Hi,

Kommentare habe ich leider keine mit reingemacht.
Falls du die Dateien nicht eins zu eins kopieren möchtest, empfehle ich dir das Tool DiffDaff.
Damit kannst du zwei Dateien vergleich und er zeigt dir die Änderungen an.

Gruß

Re: Startartikel mit Zeitsteuerung [4.8.15]

Verfasst: Fr 16. Mär 2012, 18:58
von derSteffen
Oaky, Danke!

Hast Du die Original Datei aus der 4.8.15 genommen und geändert?

Vielen Dank

Re: Startartikel mit Zeitsteuerung [4.8.15]

Verfasst: Fr 16. Mär 2012, 19:22
von blackalpha
Hey,

Ja ich habe die original Datei aus 4.8.15 genommen und dort die Änderungen eingefügt.
Wenn man selbst also keine Änderungen an den drei Dateien vorgenommen hat, kann man diese gefahrlos überschreiben.

Gruß

Re: Startartikel mit Zeitsteuerung [4.8.15]

Verfasst: Sa 17. Mär 2012, 15:17
von derSteffen
Die Änderungen:

In der \contenido\templates\standard\template.con_edit_form.html
Nach dieser Zeile

Code: Alles auswählen

<tr><td valign="top"><input type="checkbox" id="time_online_move" name="time_online_move" value="1" {ONLINEAFTERMOVECHECKED}></td>
 <td colspan="2" class="text_medium"><label for="time_online_move">i18n("Make online after move")</label></td></tr>
das einfügen:

Code: Alles auswählen

<tr><td valign="top"><input type="checkbox" id="time_start_move" name="time_start_move" value="1" {STARTAFTERMOVECHECKED}></td>
 <td colspan="2" class="text_medium"><label for="free_use_01">i18n("Zum Startartikel machen")</label></td></tr>
In der \contenido\includes\functions.con.php
Nach

Code: Alles auswählen

global $time_online_move; // Used to indicate if the moved article should be online
das einfügen

Code: Alles auswählen

global $time_start_move; // make start article
nach

Code: Alles auswählen

 $onlineaftermove = ($time_online_move == '1') ? '1' : '0';
das einfügen

Code: Alles auswählen

$startaftermove = ($time_start_move == '1')? '1': '0';
wenn nicht schon vorhanden!!!

Code: Alles auswählen

 time_target_cat,
 time_online_move
ändern in

Code: Alles auswählen

 time_target_cat,
                        time_online_move,
						free_use_01

Code: Alles auswählen

 '".Contenido_Security::escapeDB($onlineaftermove, $db)."')";
ändern in

Code: Alles auswählen

'".Contenido_Security::escapeDB($onlineaftermove, $db)."',
    '".Contenido_Security::escapeDB($startaftermove, $db)."')";
Nach

Code: Alles auswählen

 global $time_online_move; // Used to indicate if the moved article should be online
das einfügen

Code: Alles auswählen

global $time_start_move;
Nach

Code: Alles auswählen

$onlineaftermove = ($time_online_move == '1') ? '1' : '0';
das einfügen

Code: Alles auswählen

 $startaftermove = ($time_start_move == '1' )? '1': '0';

Code: Alles auswählen

 time_online_move = '".Contenido_Security::toInteger($onlineaftermove)."'";
ändern in

Code: Alles auswählen

 time_online_move = '".Contenido_Security::toInteger($onlineaftermove)."',
free_use_01 = '".Contenido_Security::toInteger($startaftermove)."'";
Das

Code: Alles auswählen

 /* Set all articles which are in between of our start/endtime to online */

    $sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() > datestart AND (NOW() < dateend OR dateend = '0000-00-00 00:00:00') AND " .

            "online = 0 AND timemgmt = 1"; 

    $db->query($sql);
 

    while ($db->next_record()) {

        // modified 2007-11-14: Set publish date if article goes online

        $sql = "UPDATE " . $cfg["tab"]["art_lang"] . " SET online = 1, published = datestart " .

                "WHERE idartlang = " . Contenido_Security::toInteger($db->f("idartlang"));

        $db2->query($sql);

    }
mit dem ersetzen

Code: Alles auswählen

/* Set all articles which are in between of our start/endtime to online */

    #$sql = "SELECT idartlang FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() > datestart AND (NOW() < dateend OR dateend = '0000-00-00 00:00:00') AND " .

    # "online = 0 AND timemgmt = 1";

    $sql = "SELECT idartlang, idart, idlang, free_use_01 FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() > datestart AND NOW() < dateend AND online = 0 AND timemgmt = 1";

    $db->query($sql);

 

 

 

    while ($db->next_record()) {

        // modified 2007-11-14: Set publish date if article goes online

        $sql = "UPDATE " . $cfg["tab"]["art_lang"] . " SET online = 1, published = datestart " .

                "WHERE idartlang = " . Contenido_Security::toInteger($db->f("idartlang"));

        $db2->query($sql);

 

 

    if ( $db->f('free_use_01')=='1' )

    {

        $sql = "SELECT DISTINCT idcat FROM {$cfg['tab']['cat_art']} WHERE idart=".$db->f('idart');

        $db2->query($sql);

        

        if ( $db2->next_record() )

        {

            $startidcat = $db2->f("idcat");

            $startidartlang = $db->f("idartlang");

            $lang = $db->f("idlang");

 

            if ($cfg["is_start_compatible"] == true)

            {

                $sql = "UPDATE ".$cfg["tab"]["cat_art"]." SET is_start ='0' WHERE idcat = $startidcat";

                $db2->query($sql);

 

                $sql = "UPDATE ".$cfg["tab"]["cat_art"]." SET is_start='1' WHERE idcat = $startidcat AND idart =".$db->f("idart")." LIMIT 1";

                $db2->query($sql);

            

            }

            else

            {

                $sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET startidartlang='$startidartlang' WHERE idcat='$startidcat' AND idlang='".$db->f("idlang")."'";

                $db2->query($sql);

            }

            

            // deactivate timemanagement if article is a start-article

            $sql = "UPDATE ".$cfg["tab"]["art_lang"]." SET timemgmt='0' WHERE idart='".$db->f("idart")."' AND idlang='".$db->f("idlang")."'";

            $db2->query($sql);

 

        } // $db2->next_record()

    }

    }
Das

Code: Alles auswählen

 /* Perform after-end updates */

    $sql = "SELECT idartlang, idart, time_move_cat, time_target_cat, time_online_move FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() > dateend AND dateend != '0000-00-00 00:00:00' AND timemgmt = 1";
 
mit dem ersetzen

Code: Alles auswählen

/* Perform after-end updates */

    #$sql = "SELECT idartlang, idart, time_move_cat, time_target_cat, time_online_move FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() > dateend AND dateend != '0000-00-00 00:00:00' AND timemgmt = 1";

    $sql = "SELECT idartlang, idart, time_move_cat, time_target_cat, time_online_move, free_use_01 FROM ".$cfg["tab"]["art_lang"]." WHERE NOW() > dateend AND dateend != '0000-00-00 00:00:00' AND timemgmt = 1";
 
In der \contenido\includes\include.con_edit_form.php

Code: Alles auswählen

$tmp_movetocat = $db->f("time_move_cat");
ändern in

Code: Alles auswählen

$tmp_movetocat = $db->f("time_move_cat");
            $tmp_startaftermove = $db->f("free_use_01");

Code: Alles auswählen

/* Summary */
ergänzen mit

Code: Alles auswählen

if ($tmp_startaftermove == "1")
	        {
        		$tpl->set('s', 'STARTAFTERMOVECHECKED', 'checked'.$allow_usetimemgmt);
        	} else {
        		$tpl->set('s', 'STARTAFTERMOVECHECKED', ''.$allow_usetimemgmt);
        	}
			
		/* Summary */
OHNE GEWÄHR! Da ich mitbekommen habe, dass das Programm DiffDaff auch Fehler macht!

MfG Steffen

Re: Startartikel mit Zeitsteuerung [4.8.15]

Verfasst: Sa 17. Mär 2012, 19:07
von Spider IT
WinMerge ist vielleicht eine Alternative :)

Gruß
René

Re: Startartikel mit Zeitsteuerung [4.8.15]

Verfasst: Mo 30. Jul 2012, 17:30
von nurich
Gast hat geschrieben:Geänderte Dateien:

Code: Alles auswählen

contenido/includes/functions.con.php
contenido/includes/include.con_edit_form.php
contenido/templates/standard/template.con_edit_form.php
Hallo, hat super funktioniert - vielen Dank!

Aber folgendes Beispiel mit einem Problemchen:
Es existieren 2 Artikel und unterscheiden sich nur mit einem Urlaubs-Hinweis.
Der Artikel ohne Urlaubs-Hinweis ist als Startartikel definiert.
Wenn aber in dem Zeitraum X der Artikel mit dem Urlaubs-Hinweis erscheinen soll, wird nach dem Endzeitpunkt der Artikel ohne Urlaubs-Hinweis nicht mehr als Startartikel gesetzt.
Wie könnte man das lösen?

VG
NurIch