PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Template switsch für CMS


Unheilig
09.02.2010, 16:31:35
Ich arbeite gerade an einem CMS und brauche aus diesem grunde eine Funktion das Themplate im Adminbereich ein zu Stelle.

Bitte um Hilfe , ich weiß nicht genau wie ich das Umsetzen kann.

Templates sollen im Admin bereich aufgelistet werden um einen zu Aktivieren. Datenbank vorhanden.

Wäre super wenn jemand mir Helfen könnte:

Habe Datenbank erstellt :

CREATE TABLE `cms_skins` (
`id` INT( 3 ) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR( 30 ) NOT NULL ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;

Der Skin heißt default. Der Insert-Query sieht so aus:

INSERT INTO `cms_skins` ( `id` , `name` )
VALUES (
'', 'default'
);

So sieht der SQL-Befehl aus:

INSERT INTO `cms_settings` ( `property` , `value` )
VALUES (
'selectedskin', '1'
);

Ich habe jetzt einige Skins erstellt , jetz brauche ich etwas , wo ich die im Admin bereich als Standart Aktivieren kann.


Wäre echt super wenn mir jemand helfen könnte ...

mfg

Unheilig
09.02.2010, 16:45:36
Habe jetzt einen Skin Controller eingebaut :

* getCurrentSkinId: gibt die aktuell ausgewählte ID des Skins wieder
* getCurrentSkinName: liefert den Namen des Skins
* getCurrentSkinPath: gibt die Speicheradresse des Skins wieder.

<?PHP
class SkinController{

function getCurrentSkinId(){
return getSetting("selectedskin");
}

function getCurrentSkinName(){
global $dbpraefix;
$res = mysql_query("SELECT name FROM ".$dbpraefix."skins
WHERE id = '".SkinController::getCurrentSkinId()."'");
if($row = mysql_fetch_row($res)){
return $row[0];
}
else{
return "default";
}
}

function getCurrentSkinPath(){
return "system/skins/".SkinController::getCurrentSkinName();
}
}
?>

In der Funktion getCurrentSkinID wird einfach nur über die Funktion getSetting aus der Datei settings.php die aktuelle ID aus der DB geholt und mit return zurückgegeben.

Die Funktion getCurrentSkinName muss auf die Variable $dbpraefix aus der dbsettings.php zugreifen. Diese muss deswegen erst einmal als global deklariert werden. Danach wird eine MySQL-Abfrage gesendet, um den Namen herauszubekommen. Hierbei wird auf die Funktion getCurrentSkinID zugegriffen. Da wir ja alle Funktionen statisch aufrufen möchten, müssen wir hier den Klassennamen gefolgt von 2 Doppelpunkten und den Funktionnamen aufrufen. Sollte die Abfrage scheitern, wird hier der Wert “default” für den Standardskin zurückgegeben.

getCurrentSkinPath verknüpft einfach den Skinnamen mit dem Speicherplatz, wo die Skins gespeichert sind.

* dbconnect.php (beinhaltet auch die dbsettigns.php und verbindet zur DB)
* settings.php (für das Auslesen der Einstellungen)


Die Index :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<?PHP
include("system/dbconnect.php");
include("system/settings.php");
include("system/classes/skincontroller.php");
include("system/filterfilename.php");
include(filterfilename("content/articles/".$_GET['include']));
include(SkinController::getCurrentSkinPath()."/test.php");
?>
</body>
</html>

urvater
09.02.2010, 17:27:21
Ich versuche mal dein Problem zu verstehen.

1. Du hast mehrere Skins erstellt, die mit Namen und ID in einer DB-Tabelle stehen.
2. Du hast eine Tabelle in der der aktuell gewählte Skin drin steht. Mehr nicht
3. mit getCurrentSkinPath verknüpfst du dann den Skinnamen mit seinem Speicherplatz

Nun sucht du etwas womit du im Adminbereich einen der vorhandenen Skins als Standard festlegen kannst.

Bei einer DB Lösung würde ich deine Tabelle cms_skins um eine Spalte "default" erweitern und dem ausgewählten Skin dort einen Wert verpassen. Z.B. eine 1
Um den gewählten Skin zu finden müsste der SELECT als WHERE die 1 als Bedingung haben.

Für den Adminbereich kannst du dann diese Tabelle komplett auslesen und dir eine Auswahlliste erstellen mit allen Skins und den momentan aktiven als SELECTED setzen. Legst du einen neuen Skin fest müsstest du den zur Zeit aktiven Skin im default auf NULL setzten und den neu festgelegten mit der 1 versehen.

Unheilig
09.02.2010, 17:41:42
Bei einer DB Lösung würde ich deine Tabelle cms_skins um eine Spalte "default" erweitern und dem ausgewählten Skin dort einen Wert verpassen. Z.B. eine 1
Um den gewählten Skin zu finden müsste der SELECT als WHERE die 1 als Bedingung haben.

Für den Adminbereich kannst du dann diese Tabelle komplett auslesen und dir eine Auswahlliste erstellen mit allen Skins und den momentan aktiven als SELECTED setzen. Legst du einen neuen Skin fest müsstest du den zur Zeit aktiven Skin im default auf NULL setzten und den neu festgelegten mit der 1 versehen.


Habe in der Tabelle cms_skins

INSERT INTO `cms_settings` ( `property` , `value` )
VALUES (
'selectedskin', '1'
);

schon Spalte "default" und selectedskin 1

Was ich brauche ist ein Außlesen vorhandener Skins aus dem Web Verzeichnis und die option diesen Ordner als "Skin" zu Aktivieren. Wobei der Ordnernahme in die Datenbank geschrieben wird um diesen Skin zu Aktivieren. Wenn ich in der DB den namen ändere ( default in z.b. Design1 ) wird dieser auch benutzt

cortex
09.02.2010, 17:49:27
warum fragst du nicht den author des skripts?

PHP SkinController (http://blog.stevieswebsite.de/2009/04/php-skincontroller-code-blog/)

Was ich brauche [...]

na dann, urvater. leg mal los...

cx

Unheilig
09.02.2010, 17:56:38
warum fragst du nicht den author des skripts?

PHP SkinController (http://blog.stevieswebsite.de/2009/04/php-skincontroller-code-blog/)



na dann, urvater. leg mal los...

cx

1. Ist das ein Gemeinschafts Project
2. einzelne Code sekmente werden von einigen Umgesetzt.
3 Das CMS wird auf http://creativecommons.org/licenses/GPL/2.0/ laufen .

habe im mom nur ein Einfache Skin Aktivierungs möglichkeit.

<h1>Einstellungen</h1>
<?PHP
if($_POST['save']){
foreach($_POST as $property=>$value){
if($property != "save"){
setSetting($property,$value);
}
}
}
?>

<form action="/admin/index.php?page=settings" method="POST">
<fieldset>
<legend>Einstellungen &auml;ndern</legend>
<?PHP
$res = mysql_query("SELECT * FROM ".$dbpraefix."settings WHERE activated = 1");
while($row = mysql_fetch_assoc($res)){
echo "<label for=\"".htmlentities($row['property'])."\">";
echo $row['description'].":";
echo "</label>";
echo "<input name=\"".htmlentities($row['property'])."\" value=\"".htmlentities($row['value'])."\" />";
}
?>
<br /><input type="submit" name="save" value="Speichern" />
</fieldset>
</form>


Wobei die Skins aber erst in DB eingetragen werden müssen. Das macht die Angelegenheit für die Benutzer kompleziert.

cortex
09.02.2010, 18:20:28
1. Ist das ein Gemeinschafts Project
2. einzelne Code sekmente werden von einigen Umgesetzt.
3 Das CMS wird auf http://creativecommons.org/licenses/GPL/2.0/ laufen .


und weiter...?

cx

urvater
10.02.2010, 14:32:11
Was ich brauche ist ein Außlesen vorhandener Skins aus dem Web Verzeichnis und die option diesen Ordner als "Skin" zu Aktivieren. Wobei der Ordnernahme in die Datenbank geschrieben wird um diesen Skin zu Aktivieren. Wenn ich in der DB den namen ändere ( default in z.b. Design1 ) wird dieser auch benutzt
Dann wird dich dieser Beitrag hier schon gut weiter bringen.
Rekursive Verzeichnisauflistung (http://www.selfphp.de/kochbuch/kochbuch.php?code=44) Musst du dann deinen Wünschen entsprechend anpassen.
Hast du deine Verzeichnissse kannst du dir diese dann als formatiert für die Auswahl ausgeben lassen.
Letztendlich dann halt ein UPDATE in der DB um den momentanen Skin mit dem neu ausgewählten Skin zu überschreiben.
na dann, urvater. leg mal los...

Ich habe fertig