[PHP] Dynamisch Config erstellen

krizzelfix

Commander
Dabei seit
Sep. 2005
Beiträge
2.626
Hallo User,

ich bin grad dabei einen Installer für ein CMS zu schreiben. Nur bekomme ich beim schreiben der config-Datei nur Müll raus.

Ich schreibe zuerst den zukünftigen Inhalt in eine Variable mit dem entsprechenden Einstellungen.
PHP:
<?php
$body = "";
$body .= "<?php\n";
$body .= "\n";
$body .= "// CMS BAUSTEIN MODE (true: viele Bausteine untereinander, false: NUR wysiwyg)\n";
$body .= "\n";
$body .= "\$ENABLE_MULTIPLE_MODULES_MODE = ".isset($_POST['wysiwyg']) ? "true" : "false".";\n";
$body .= "\n";
$body .= "// Wieviel Hilfsnavigationen?\n";
$body .= "\$HILFSNAVIGATIONEN       = ".$_POST['hilfsnavi'].";\n";
$body .= "\n";

$names = explode(";", $_POST['hilfsnamen']);

$body .= "// und wie heissen die?\n";
$body .= "\$HILFSNAVIGATIONEN_NAMEN = array('".implode("', '", $names)."');\n";
Am enden der Datei schreibe ich dann alles in eine neue Datei.
PHP:
$body .= "define('SMARTY_DIR', \"template_engine/\");\n";
$body .= "// SHOP EINSTELLUNGEN ENDE\n";
$body .= "?>";

file_put_contents("access.php", $body);
Aber die ausgabe ist das letzte:
PHP:
<?php

// CMS BAUSTEIN MODE (true: viele Bausteine untereinander, false: NUR wysiwyg)

true
// Wieviel Hilfsnavigationen?
$HILFSNAVIGATIONEN       = 3;

// und wie heissen die?
$HILFSNAVIGATIONEN_NAMEN = array('Globale Navigation', ' Footer', ' Intern');

// wieviele Randleisten?
$RANDLEISTEN             = 2;

// und wie heissen die?
$RANDLEISTEN_NAMEN       = array(1 => 'Bereich Oben', 2 => ' Bereich Links');

// Sprachverwaltung aktiv?
true
// Direct-Edit aktiv?
true
// User-Bereich aktiv?
true
// CMS aktiv?
$ENABLE_CMS              = true;
Weiss einer von euch woran das liegen könnte?

Bin für jede Hilfe dankbar.

Grüße

tewes
 

der_guru

Lieutenant
Dabei seit
Juni 2004
Beiträge
618
Was ist den jetzt genau das Problem?
Also welcher Wert sollte wie aussehen?

So long
der_guru
 

BuzzGo

Lieutenant
Dabei seit
Dez. 2006
Beiträge
578
Moin,

schaue Dir mal den Code der erzeugten access.php an. Fällt Dir was auf?



PHP:
<?php

// CMS BAUSTEIN MODE (true: viele Bausteine untereinander, false: NUR wysiwyg)

true
Was soll true sein? Das kann so nicht stimmen.

PHP:
// Wieviel Hilfsnavigationen?
// Sprachverwaltung aktiv?
true
// Direct-Edit aktiv?
true
// User-Bereich aktiv?
true
Auch hier wieder: >> $VAR = true; sollte es sicherlich heissen.

Wie sieht der vollständige Code mit dem <form></form> Element aus?
Ein error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); zeigt Dir nicht initialisierte Variablen. Vielleicht wäre ein error_reporting(E_ALL); auch nicht verkehrt.

Was für eine IDE benutzt Du oder was für einen Editor?

Ich kann Eclipse SDK PHPEclipse empfehlen da solche Dinge schon beim Entwicklen vor der Ausführung sichtbar werden.
 

krizzelfix

Commander
Ersteller dieses Themas
Dabei seit
Sep. 2005
Beiträge
2.626
Vielen Dank für eure Antworten.

@der _guru: excalibur1976 hatte recht. Es werden nur die Werte für die Variablen in die Datei geschrieben, nicht aber die Variablen mit Gleichheitszeichen und Semikolon.

@excalibur1976:
Ich benutze Zend Studio zum entwicklen. Von Eclipse bin ich kein Fan ;).

Hab das Script nochmal umgeschrieben. Jetzt ist alles etwas Dynamischer.
Ich habe in die access_tmpl.txt den Inhalt der access.php aber an der Stelle wo die Werte stehen sollen CMS_VALUE[xyz] geschrieben um diese mit str_replace zu ersetzen.
access_tmpl.txt:
Code:
<?php

// CMS BAUSTEIN MODE (true: viele Bausteine untereinander, false: NUR wysiwyg)
$ENABLE_MULTIPLE_MODULES_MODE = CMS_VALUE[wysiwyg];

// Wieviel Hilfsnavigationen?
$HILFSNAVIGATIONEN       = CMS_VALUE[hilfsnavi];

// und wie heissen die?
$HILFSNAVIGATIONEN_NAMEN = array(CMS_VALUE[hilfsnamen]);

// wieviele Randleisten?
$RANDLEISTEN             = CMS_VALUE[randleisten];

// und wie heissen die?
$RANDLEISTEN_NAMEN       = array(CMS_VALUE[randnamen]);

// Sprachverwaltung aktiv?
$ENABLE_LANGUAGES        = CMS_VALUE[sprachen];

// Direct-Edit aktiv?
$ENABLE_DIRECTEDIT       = CMS_VALUE[dedit];

// User-Bereich aktiv?
$ENABLE_USER             = CMS_VALUE[cms];

// CMS aktiv?
$ENABLE_CMS              = true;

// Geschützte Dateien aktiv?
$ENABLE_PASSFILES		 = CMS_VALUE[pass];

// RSS-Feeds aktiv?
$ENABLE_RSS              = CMS_VALUE[rss];

// Newsletter aktiv?
$ENABLE_NEWSLETTER		 = CMS_VALUE[newsletter];

// Artikel Backups aktiv?
$ENABLE_ARTICLE_BACKUPS  = CMS_VALUE[backups];

// NEWSLETTER EINSTELLUNGEN
$domain                  = "http://CMS_VALUE[dname]/newsletter";
$domainwebseite          = $domainname;
$limit                   = 10;
// NEWSLETTER EINSTELLUNGEN ENDE

// Shop aktiv?
$ENABLE_SHOP             = CMS_VALUE[shop];

// Shop-Eingrenzungen
$ACCESS_SHOP['ansprechpartner']       = CMS_VALUE[ansprechpartner];
$ACCESS_SHOP['bestellfunktion']       = CMS_VALUE[bestellfunktion];
$ACCESS_SHOP['anfragefunktion']       = CMS_VALUE[anfragefunktion];
$ACCESS_SHOP['produktgalerie']        = CMS_VALUE[produktgalerie];
$ACCESS_SHOP['produktzubehoer']       = CMS_VALUE[produktzubehoer];
$ACCESS_SHOP['produktdownloads']      = CMS_VALUE[produktdownloads];

// -1 für unbegrenzt
$ACCESS_SHOP['anzahl_shopkategorien'] = CMS_VALUE[anzahl_shopkategorien];

// -1 für unbegrenzt
$ACCESS_SHOP['anzahl_shopprodukte']   = CMS_VALUE[anzahl_shopprodukte];

// -1 für unbegrenzt
$ACCESS_SHOP['max_variationen']       = CMS_VALUE[max_variationen];
$ACCESS_SHOP['max_merkmale']	      = CMS_VALUE[max_merkmale];


define('SMARTY_DIR', "template_engine/");
// SHOP EINSTELLUNGEN ENDE
?>
init.access.php:
PHP:
<?php 
$indezes = array("wysiwyg",
				 "hilfsnavi",
				 "hilfsnamen", 
				 "randleisten", 
				 "randnamen", 
				 "sprachen", 
				 "dedit", 
				 "cms", 
				 "pass", 
				 "rss", 
				 "newsletter", 
				 "backups", 
				 "dname", 
				 "shop", 
				 "ansprechpartner", 
				 "bestellfunktion", 
				 "anfragefunktion", 
				 "produktgalerie", 
				 "produktzubehoer", 
				 "produktdownloads", 
				 "anzahl_shopkategorien", 
				 "anzahl_shopprodukte", 
				 "max_variationen",
 				 "max_merkmale");
 				 
foreach ($indezes as $key => $value) 
{
	if (!isset($_POST[$value])) {
		$_POST[$value] = "false";
	}
}
$file = file_get_contents("access_tmpl.txt");
echo $file;
$i = 0;

foreach ($_POST as $key => $value) 
{
	$new_file = str_replace("CMS_VALUE[$key]", $value, $file, $i);
}

file_put_contents('access.php', $new_file);
?>
Und hier den Inhalt der From:
Code:
	if (isset($_POST['insert']) && $_POST['insert'] == "true") 
	{
		include('includes/init.access.php');
	}
	include("config.php");
	?>
	<form method="POST" action="index.php">
	<input name="insert" type="hidden" value="true" />
	<table cellpadding="0" cellspacing="0">
		<tr>
			<td><input name="wysiwyg" type="checkbox" value="true"  <?=isset($_POST['wysiwyg']) ? "CHECKED " : ""?>/><label for="wysiwyg">Bausteine aktivieren</label></td>
			<td><input name="sprachen" type="checkbox" value="true"  <?=isset($_POST['sprachen']) ? "CHECKED " : ""?>/><label for="sprachen">Sprachen aktivieren</label></td>
		</tr>
		<tr>
			<td><input name="dedit" type="checkbox" value="true"  <?=isset($_POST['dedit']) ? "CHECKED " : ""?>/><label for="dedit">Direct Edit aktivieren</label></td>
			<td><input name="user" type="checkbox" value="true"  <?=isset($_POST['user']) ? "CHECKED " : ""?>/><label for="user">User Verwaltung aktivieren</label></td>
		</tr>
		<tr>
			<td><input name="pass" type="checkbox" value="true"  <?=isset($_POST['pass']) ? "CHECKED  " : ""?>/><label for="pass">Gesch&uuml;tzte Dateien aktivieren</label></td>
			<td><input name="rss" type="checkbox" value="true"  <?=isset($_POST['rss']) ? "CHECKED " : ""?>/><label for="rss">RSS aktivieren</label></td>
		</tr>
		<tr>
			<td><input name="newsletter" type="checkbox" value="true"  <?=isset($_POST['newsletter']) ? "CHECKED " : ""?>/><label for="newsletter">Newsletter aktivieren</label></td>
			<td><input name="backups" type="checkbox" value="true"  <?=isset($_POST['backups']) ? "CHECKED " : ""?>/><label for="backups">Backups aktivieren</label></td>
		</tr>
		<tr>
			<td colspan="2"><input name="shop" type="checkbox" value="true"  <?=isset($_POST['shop']) ? "CHECKED " : ""?>/><label for="shop">Shop aktivieren</label></td>
		</tr>
		<tr>
			<td style="padding: 0 0 0 20px;">
				<input name="ansprechpartner" type="checkbox" value="true"  <?=isset($_POST['ansprechpartner']) ? "CHECKED " : ""?>/><label for="ansprechpartner">Ansprechpartner aktivieren</label><br />
				<input name="bestellfunktion" type="checkbox" value="true"  <?=isset($_POST['bestellfunktion']) ? "CHECKED " : ""?>/><label for="bestellfunktion">Bestellfunktion aktivieren</label><br />
				<input name="anfragefunktion" type="checkbox" value="true"  <?=isset($_POST['anfragefunktion']) ? "CHECKED " : ""?>/><label for="anfragefunktion">Anfragefunktion aktivieren</label><br />
				<input name="produktgalerie" type="checkbox" value="true"  <?=isset($_POST['produktgalerie']) ? "CHECKED " : ""?>/><label for="produktgalerie">Produktgalerie aktivieren</label><br />
				<input name="produktzubehoer" type="checkbox" value="true"  <?=isset($_POST['produktzubehoer']) ? "CHECKED " : ""?>/><label for="produktzubehoer">Produktzubeh&ouml;r aktivieren</label><br />
				<input name="produktdownloads" type="checkbox" value="true"  <?=isset($_POST['produktdownloads']) ? "CHECKED " : ""?>/><label for="produktdownloads">Produktdownloads aktivieren</label>
			</td>
		</tr>
		<tr>
			<td>Hilfsnavigationen: </td>
			<td><input name="hilfsnavi" value="<?=isset($_POST['hilfsnavi']) ? $_POST['hilfsnavi'] : ""?>" type="text" /></td>
		</tr>
		<tr>
			<td>Namen der Hilfsnavigationen</td>
			<td><input name="hilfsnamen" value="<?=isset($_POST['hilfsnamen']) ? $_POST['hilfsnamen'] : ""?>" type="text" /></td>
		</tr>
		<tr>
			<td>Randleisten</td>
			<td><input name="randleisten" value="<?=isset($_POST['randleisten']) ? $_POST['randleisten'] : ""?>" type="text" /></td>
		</tr>
		<tr>
			<td>Namen der Randleisten</td>
			<td><input name="randnamen" value="<?=isset($_POST['randnamen']) ? $_POST['randnamen'] : ""?>" type="text" /></td>
		</tr>
		<tr>
			<td>Anzahl der Shop Kategorien</td>
			<td><input name="anzahl_shopkategorien" value="<?=isset($_POST['anzahl_shopkategorien']) ? $_POST['anzahl_shopkategorien'] : ""?>" type="text" /></td>
		</tr>
		<tr>
			<td>Anzahl der Produkte</td>
			<td><input name="anzahl_shopprodukte" value="<?=isset($_POST['anzahl_shopprodukte']) ? $_POST['anzahl_shopprodukte'] : ""?>" type="text" /></td>
		</tr>
		<tr>
			<td>Anzahl der Variationen</td>
			<td><input name="max_variationen" value="<?=isset($_POST['max_variationen']) ? $_POST['max_variationen'] : ""?>" type="text" /></td>
		</tr>
		<tr>
			<td>Maximale Merkmale</td>
			<td><input name="max_merkmale" value="<?=isset($_POST['max_merkmale']) ? $_POST['max_merkmale'] : ""?>" type="text" /></td>
		</tr>
		<tr>
			<td>Domaine Name</td>
			<td><input name="dname" value="<?=isset($_POST['dname']) ? $_POST['dname'] : ""?>" type="text" /></td>
		</tr>
		<tr>
			<td colspan="2"><input name="submit" value="Erstellen" type="submit" /></td>
		</tr>
	</table>
	</form>
	<?php
Bekomme seit dem ich das auf die access_tmpl.txt umgestellt habe von error_reporting(E_ALL); den Fehler: Warning: file_get_contents(access_tmpl.txt) [function.file-get-contents]: failed to open stream: No such file or directory in C:\Programme\xampp\htdocs\WebCMS\web_root\htdocs\install\includes\init.access.php on line 33
Was ja eigentlich nicht sein kann, die Dateien liegen im selben Verzeichnis.

Hoffe ihr könnt mir weiter helfen.

Grüße

tewes

//Edit:
Hab den Fehler gefunden: Ich hatte um die verkürzten abfragen keine Klammern. Dadurch zerscheiss PHP das alles.

Vielen dank für eure Hilfe

Grüße

tewes
 
Zuletzt bearbeitet:

fliegenkiller

Lt. Junior Grade
Dabei seit
März 2005
Beiträge
387
Hallo, wieso machst du nicht ein Templatefile für die Configuration?
danach musst du nur noch die Platzhalter ersetzen und fertig.
 

krizzelfix

Commander
Ersteller dieses Themas
Dabei seit
Sep. 2005
Beiträge
2.626
Habe ich doch bei meinem Zweiten Post geschrieben das ich das so machen. Ein einfach CMS_VALUE[xyz] macht im PHP-Quelltext schließlich keinen sinn ;). Aber ich habs ja jetzt mit der ersten Variante zum laufen bekommen.

Grüße

tewes
 
Top