Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#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
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.
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
Seiten: 1