Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 09. Dezember 2011 11:14

antiheld2000
kennt CMS/ms
Registriert: 21. Dezember 2010
Beiträge: 128

AdvancedContent - Frontend-Zugriff - Alle Seiten initial umstellen

Hi,

ich würde gerne in einem bestehenden Projekt sehr viele Unterseiten im Frontend-Zugriff einschränken. Aus diesem Grund würde es sich eventuell anbieten, direkt in der DB zu schrauben. Es soll eigentlich allen Seiten gesagt werden, dass sie den Frontend-Zugriff vom übergeordneten Element übernehmen sollen und das Anmelde-Formular anzeigen auf Ja gesetzt werden.
Hat jemand einen Tipp für mich, wie ich das für mehrere hundert Seiten effektiv und schnell lösen kann?

MfG
anti

Offline

#2 09. Dezember 2011 16:12

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: AdvancedContent - Frontend-Zugriff - Alle Seiten initial umstellen

Hier ist ein UDT der das macht.
Kann man bei Bedarf auch an andere Eigenschaften/Werte anpassen:

# customize this to update the properties you want
# propname => propvalue
$properties = array(
    'feu_access'            => -1,
    'redirect_page'         => -1,
    'feu_action'            => -1,
    'hide_menu_item'        => -1,
    'inherit_feu_params'    => 1,
    'feu_params'            => -1,
    'feu_params_smarty'     => -1,
    'inherit_custom_params' => 1,
    'custom_params'         => -1,
    'custom_params_smarty'  => -1
);

# customize this:
# enter the parent pages here where you want to update its children
# $parent_pages is an array of content ids
# e.g. $parent_pages = array(1,2,3,4,5,6);
$parent_pages = array();

# db instance:
$db = &cmsms()->GetDb();

# get child pages:
$query = "SELECT content_id 
    FROM ". cms_db_prefix() . "content 
    WHERE parent_id IN (".implode(',',$parent_pages).") 
    AND type = ?";
$dbresult = &$db->Execute($query, array('content2'));

# update child pages:
while($dbresult && $row = $dbresult->FetchRow()) 
{
    foreach($properties as $prop_name => $prop_value)
    {
        $query = "UPDATE ". cms_db_prefix() . "content_props 
            SET content = ? 
            WHERE prop_name = ?
            AND content_id = ?";
        $db->Execute($query, array($prop_value, $prop_name, $row['content_id']));
    }
}

Anwendung auf eigene Gefahr wink
Also lieber vorher testen.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#3 09. Dezember 2011 16:55

antiheld2000
kennt CMS/ms
Registriert: 21. Dezember 2010
Beiträge: 128

Re: AdvancedContent - Frontend-Zugriff - Alle Seiten initial umstellen

Hm, das einzige, was ich doch anpassen muss, ist diese Zeile:
$parent_pages = array();
Oder? Wenn ich bspw. die ID 56 eintrage, dann sollte nach der Ausführung des UDTs alle Kinder von 56 angepasst sein, oder?

Offline

#4 09. Dezember 2011 18:35

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: AdvancedContent - Frontend-Zugriff - Alle Seiten initial umstellen

Richtig.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#5 20. Dezember 2011 13:58

antiheld2000
kennt CMS/ms
Registriert: 21. Dezember 2010
Beiträge: 128

Re: AdvancedContent - Frontend-Zugriff - Alle Seiten initial umstellen

Hat leider ein wenig länger gedauert, aber irgendwie scheint es nicht zu klappen. Nachdem ich den UDT angelegt, angepasst und gespeichert habe, führe ich ihn durch ein Klick auf das Zahnrad neben dem Tag aus oder? Bei mir wird in den Kindern der gewünschten ID alles unverändert angezeigt. c.png

Hier noch einmal mein Tag:

[== php ==]
# customize this to update the properties you want
# propname => propvalue
$properties = array(
    'feu_access'            => -1,
    'redirect_page'         => -1,
    'feu_action'            => -1,
    'hide_menu_item'        => -1,
    'inherit_feu_params'    => 1,
    'feu_params'            => -1,
    'feu_params_smarty'     => -1,
    'inherit_custom_params' => 1,
    'custom_params'         => -1,
    'custom_params_smarty'  => -1
);

# customize this:
# $parent_pages is an array of content ids
# e.g. $parent_pages = array(1,2,3,4,5,6);
$parent_pages = array(56,181);

# db instance:
$db = &cmsms()->GetDb();

# get child pages:
$query = "SELECT content_id 
    FROM ". cms_db_prefix() . "content 
    WHERE parent_id IN (".implode(',',$parent_pages).") 
    AND type = ?";
$dbresult = &$db->Execute($query, array('content2'));

# update child pages:
while($dbresult && $row = $dbresult->FetchRow()) 
{
    foreach($properties as $prop_name => $prop_value)
    {
        $query = "UPDATE ". cms_db_prefix() . "content_props 
            SET content = ? 
            WHERE prop_name = ?
            AND content_id = ?";
        $db->Execute($query, array($prop_value, $prop_name, $row['content_id']));
    }
}

Steckt irgendwo noch ein Fehler?

Offline

#6 20. Dezember 2011 14:22

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: AdvancedContent - Frontend-Zugriff - Alle Seiten initial umstellen

Bei Klick auf das Zahnrad wird Dir der UDT erstmal nur angezeigt.
Du musst dann separat nochmal auf ausführen klicken.
Ich kann hier keinen Fehler erkennen.
Bei mir funktioniert es.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#7 20. Dezember 2011 14:43

antiheld2000
kennt CMS/ms
Registriert: 21. Dezember 2010
Beiträge: 128

Re: AdvancedContent - Frontend-Zugriff - Alle Seiten initial umstellen

Sehr seltsam. Habe auch auf "Starten" geklickt. Erfolglos.
Sag mal, was bedeuten denn die Fragezeichen eigentlich?

SET content = ?
WHERE prop_name = ?
AND content_id = ?

Offline

#8 20. Dezember 2011 14:46

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: AdvancedContent - Frontend-Zugriff - Alle Seiten initial umstellen

An dieser Stelle werden die entsprechenden Daten im Query eingefügt.
Die Daten befinden sich in dem Array bei $db->Execute($query, array(...) )
In der Reihenfolge wie sie im Query stehen, stehen sie auch im Array.

Was sagen etwaige Fehlermeldungen?


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#9 20. Dezember 2011 15:14

antiheld2000
kennt CMS/ms
Registriert: 21. Dezember 2010
Beiträge: 128

Re: AdvancedContent - Frontend-Zugriff - Alle Seiten initial umstellen

Keine Fehlermeldungen auf dem Schirm.

Offline

#10 21. Dezember 2011 12:11

antiheld2000
kennt CMS/ms
Registriert: 21. Dezember 2010
Beiträge: 128

Re: AdvancedContent - Frontend-Zugriff - Alle Seiten initial umstellen

Was passiert eigentlich genau, wenn ich in den erweiterten Optionen sage "Vom übergeordneten Element übernehmen"?

Werden dann einmalig beim Klick auf Speichern oder Übernehmen die entsprechenden Werte der aktuellen Seite zugeordnet?

Oder wird der aktuellen Seite somit gesagt, dass immer die entsprechenden Werte der übergeordneten Seite übernommen werden sollen?

Offline

#11 21. Dezember 2011 17:54

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: AdvancedContent - Frontend-Zugriff - Alle Seiten initial umstellen

Letzteres.
Es wird der Wert -1 gespeichert.
Und das sagt dem Modul, dass es im Frontend den Wert der übergeordneten Seite nehmen soll.

Füge mal im UDT jeweils unter $dbresult = &$db->Execute($query, ... ); (kommt zweimal vor) folgende Zeilen ein:

echo $db->sql . "\n";
echo $db->ErrorMsg() . "\n";

Was steht dann da als Ausgabe, wenn Du den UDT ausführst?

Das UDT setzt vorraus, dass die Seiten schonmal als Erweiterter Inhalt gespeichert wurden.
Ansonsten müsste man die SQL Abfrage noch etwas abändern und erstmal prüfen, ob die Eigenschaft, die geändert werden soll schon existiert oder nicht. Wenn ja, dann UPDATE (wie bisher), wenn nicht, dann INSERT.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#12 21. Dezember 2011 18:33

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: AdvancedContent - Frontend-Zugriff - Alle Seiten initial umstellen

Hier mal eine überarbeitete Version:

# customize this to set the properties you want
# propname => propvalue

$properties = array(
    'feu_access'            => -1,
    'redirect_page'         => -1,
    'feu_action'            => -1,
    'hide_menu_item'        => -1,
    'inherit_feu_params'    => 1,
    'feu_params'            => -1,
    'feu_params_smarty'     => -1,
    'inherit_custom_params' => 1,
    'custom_params'         => -1,
    'custom_params_smarty'  => -1
);

# customize this:
# $parent_pages is an array of content ids
# enter the content ids here where you want to change its child pages.
# e.g. $parent_pages = array(1,2,3,4,5,6);

$parent_pages = array(-1);

# db instance:
$db = &cmsms()->GetDb();

# get child pages:
$query = "SELECT content_id 
    FROM ". cms_db_prefix() . "content 
    WHERE parent_id IN (".implode(',',$parent_pages).") 
    AND type = ?";
$dbresult = &$db->Execute($query, array('content2'));

echo $db->sql . "\n";
echo $db->ErrorMsg() . "\n";

# update child pages:
while($dbresult && $row = $dbresult->FetchRow()) 
{
    foreach($properties as $prop_name => $prop_value)
    {
        $update = $db->GetOne(
            "SELECT COUNT(1) 
            FROM ". cms_db_prefix() . "content_props 
            WHERE prop_name = ?
                AND content_id = ?",
            array($prop_name, $row['content_id'])
        );

echo $db->sql . "\n";
echo $db->ErrorMsg() . "\n";

        if($update)
        {
            $db->Execute(
                "UPDATE ". cms_db_prefix() . "content_props 
                SET content = ? 
                WHERE prop_name = ?
                    AND content_id = ?",
                array($prop_value, $prop_name, $row['content_id'])
            );
        }
        else
        {
            $date = trim($db->DBTimeStamp(time()), "'");
            $db->Execute(
                "INSERT DELAYED ". cms_db_prefix() . "content_props 
                (content_id, type, prop_name, content, create_date, modified_date)
                VALUES (?,?,?,?,?,?)",
                array($row['content_id'], 'string', $prop_name, $prop_value, $date, $date)
            );
        }

echo $db->sql . "\n";
echo $db->ErrorMsg() . "\n";

    }
}

Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#13 21. Dezember 2011 20:13

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: AdvancedContent - Frontend-Zugriff - Alle Seiten initial umstellen

Und hier noch eine Version...
Achtung! Anwendung hat sich geändert!
Man kann jetzt alle Seiten ändern oder rekursiv alle Ebenenen von untergeordneten Seiten ändern.

# configuration:

# customize this to set the properties you want
# propname => propvalue
$properties = array(
    'feu_access'            => -1,
    'redirect_page'         => -1,
    'feu_action'            => -1,
    'hide_menu_item'        => -1,
    'inherit_feu_params'    => 1,
    'feu_params'            => -1,
    'feu_params_smarty'     => -1,
    'inherit_custom_params' => 1,
    'custom_params'         => -1,
    'custom_params_smarty'  => -1
);

# customize this:
# $pages is an array of content ids
# enter the content ids here where you want to change its properties
# e.g. $pages = array(1,2,3,4,5,6);
# leave this empty to update all pages
$pages = array(-1);

# customize this:
# set to true if you want to update only the child pages of the given page ids
# does not work if $pages is empty
$childs_only = false;

# customize this:
# set this to true if you want to update multiple child levels
# (only used if $childs_only is true)
$recurse = false;

# end configuration



if(!function_exists('ac_get_child_pages'))
{
    function ac_get_child_pages($parent_pages = array(), $recurse = false)
    {
        $db          = &cmsms()->GetDb();
        $child_pages = array();
        if(empty($parent_pages)) return $child_pages;
        $dbresult = &$db->Execute(
            "SELECT content_id 
            FROM ". cms_db_prefix() . "content 
            WHERE parent_id IN (".implode(',',$parent_pages).") 
            AND type = ?", 
            array('content2')
        );
        
        # debug output:
        #echo $db->sql . "\n";
        #echo $db->ErrorMsg() . "\n";
        
        while($dbresult && $row = $dbresult->FetchRow()) 
        {
            $child_pages[] = $row['content_id'];
        }
        
        if($recurse)
        {
            $child_pages = array_merge($child_pages, ac_get_child_pages($child_pages, $recurse));
        }
        
        return $child_pages;
    }
}

if($childs_only)
{
    $pages = ac_get_child_pages($pages, $recurse);
}

$db = &cmsms()->GetDb();

# get all content ids
if(empty($pages) && !$childs_only)
{
    $dbresult = &$db->Execute(
        "SELECT content_id 
        FROM ". cms_db_prefix() . "content 
        WHERE type = ?", 
        array('content2')
    );
    while($dbresult && $row = $dbresult->FetchRow()) 
    {
        $pages[] = $row['content_id'];
    }
}

# update pages:
foreach($pages as $_id)
{
    foreach($properties as $prop_name => $prop_value)
    {
        $update = $db->GetOne(
            "SELECT COUNT(1) 
            FROM ". cms_db_prefix() . "content_props 
            WHERE prop_name = ?
                AND content_id = ?",
            array($prop_name, $_id)
        );
        
        # debug output:
        #echo $db->sql . "\n";
        #echo $db->ErrorMsg() . "\n";
        
        if($update)
        {
            $db->Execute(
                "UPDATE ". cms_db_prefix() . "content_props 
                SET content = ? 
                WHERE prop_name = ?
                    AND content_id = ?",
                array($prop_value, $prop_name, $_id)
            );
        }
        else
        {
            $date = trim($db->DBTimeStamp(time()), "'");
            $db->Execute(
                "INSERT DELAYED ". cms_db_prefix() . "content_props 
                (content_id, type, prop_name, content, create_date, modified_date)
                VALUES (?,?,?,?,?,?)",
                array($_id, 'string', $prop_name, $prop_value, $date, $date)
            );
        }
        
        # debug output:
        #echo $db->sql . "\n";
        #echo $db->ErrorMsg() . "\n";
    }
}

Wie immer: Erst testen, bevor man es an einer produktiven Seite anwendet!


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline