Semplice CMS per news con PHP e XML

hyperoom

Nuovo Utente
10 Dic 2010
8
0
0
Ciao a tutti,
con molta fatica sono riuscito ad accozzare con php un semplice cms che mi permette di inviare/modificare/cancellare delle news contenute in un file xml. Fin qui tutto ok, anche perche' virtualmente posso gestire un numero di campi variabile per altre esigenze.
Nel caso di news, mi ritrovo a gestire un input di testo per il titolo ed uno per il testo vero e proprio: vorrei che quest'ultimo fosse una textarea, ma non riesco ad inserire la cosa nel codice.
Potete aiutarmi?

Il seguente e' il file news.xml:
HTML:
<?xml version="1.0" encoding="UTF-8" ?>
- <news>
- <articolo>
<titolo>Titolo 4654949</titolo>
<testo>Lorem 2Lorem 456464534 2Lorem 2Lorem 2Lorem 2Lorem 2</testo>
</articolo>
- <articolo>
<titolo>zxcz\cz\xczxc</titolo>
<testo>lkjh;kugyfjhghf</testo>
</articolo>
</news>

Creo poi un file "amministraNews.php":
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Gestione News</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h2>ARTICOLI</h2>
<p>&nbsp;</p>
<?php
$myFile = "news.xml";
$myEntity = "news";
$myFields = array("titolo", "testo");
include_once("amministraXML.php");
XMLInitialize($myFile, $myEntity, $myFields);
XMLStart();
?>
</body>
</html>

Ed ecco, poi, il cuore di tutta l'applicazione: amministraXML.php:

<link href="MyStyle.css" rel="stylesheet" type="text/css" />
<?php
//definizione funzioni
$filename = "";
$entity = "";
$fields = array();

function XMLLoadFile($filename) {
$xmlstr = file_get_contents($filename);
$xml = new SimpleXMLElement($xmlstr);
return $xml;
}

function XMLSaveFile($filename, $xml) {
$xmlstr = $xml->asXML();
return file_put_contents($filename, $xmlstr);
}

function XMLInitialize($p_filename = "", $p_entity = "", $p_fields = array()) {
global $filename, $entity, $fields;
$filename = $p_filename;
$entity = $p_entity;
$fields = $p_fields;
}

function XMLStart() {
global $filename, $entity, $fields;
if (!strlen($filename))
return;
$records = XMLLoadFile($filename);
if (isset($_POST["insert"])) {
$news = $records->addChild("news");
foreach ($fields as $field) {
$news->addChild($field, utf8_encode($_POST[$field]));
}
XMLSaveFile($filename, $records);
}
if (isset($_POST["delete"])) {
if (isset($_POST["ID"])) {
$id = (int) $_POST["ID"];
unset($records->{$entity}[$id]);
XMLSaveFile($filename, $records);
}
}
if (isset($_POST["edit"])) {
if (isset($_POST["ID"])) {
$id = (int) $_POST["ID"];
foreach ($fields as $field) {
$records->{$entity}[$id]->$field = $_POST[$field];
}
XMLSaveFile($filename, $records);
}
}
XMLShowRecords($records);
}

function XMLShowRecords($records) {
global $filename, $entity, $fields;
print <<<EOL
<table border="0" cellpadding="5" cellspacing="5" width="100%">
<tr>

EOL;
foreach ($fields as $field) {
print " <th>" . $field . "</th>\n";
}
print <<<EOL
</tr>

EOL;
for ($i = 0; $i < count($records); $i++) {
print <<<EOL
<tr>
<form method="POST">

EOL;
foreach ($fields as $field) {
print " <td><input type=\"text\" name=\"" . $field . "\" value=\"" . $records->{$entity}[$i]->$field . "\" /></td>\n";
}
print <<<EOL
<td>
<input type="hidden" name="ID" value="{$i}" />
<input type="submit" name="edit" value="Modifica" />
<input type="submit" name="delete" value="Elimina" onclick="javascript: return window.confirm('Sei sicuro di voler cancellare il record?');" />
</td>
</form>
</tr>

EOL;
}
print <<<EOL
<tr>
<form method="POST">

EOL;
foreach ($fields as $field) {
print " <td><input type=\"text\" name=\"" . $field . "\" value=\"\" /></td>\n";
}
print <<<EOL
<td>
<input type="submit" name="insert" value="Nuovo" />
</td>
</form>
</tr>
</table>

EOL;
}

?>
:hammer:
 
Ultima modifica di un moderatore:

Trogo

Utente Attivo
11 Gen 2008
370
0
0
41
Sanremo
Se non ho visto male basta inserire un controllo così:

PHP:
foreach ($fields as $field) {
	switch($field) {

		case 'titolo':
			print " <td><input type=\"text\" name=\"" . $field . "\" value=\"" . $records->{$entity}[$i]->$field . "\" /></td>\n";
			break;

		case 'testo':
			print " <td><textarea name=\"" . $field . "\" cols=\"40\" rows=\"6\">" . $records->{$entity}[$i]->$field . "</textarea>\n";
			break;	
	}
}

nei punti dove stampi i campi dell'articolo. Se poi implementi altri campi, basta aggiungere nuovi case a seconda che debbano essere poi visualizzati come INPUT o TEXTAREA.
 

hyperoom

Nuovo Utente
10 Dic 2010
8
0
0
Se non ho visto male basta inserire un controllo così:

PHP:
foreach ($fields as $field) {
	switch($field) {

		case 'titolo':
			print " <td><input type=\"text\" name=\"" . $field . "\" value=\"" . $records->{$entity}[$i]->$field . "\" /></td>\n";
			break;

		case 'testo':
			print " <td><textarea name=\"" . $field . "\" cols=\"40\" rows=\"6\">" . $records->{$entity}[$i]->$field . "</textarea>\n";
			break;	
	}
}

nei punti dove stampi i campi dell'articolo. Se poi implementi altri campi, basta aggiungere nuovi case a seconda che debbano essere poi visualizzati come INPUT o TEXTAREA.

Ciao Trogo,
infatti ha funzionato benissimo, grazie.
Ma se volessi visualizzare i dati ordinati dove e come dovrei agire?
Mi spiego meglio.
Ho modificato l'XML (e quindi ho aggiunto un altro case allo switch php) per inserire la data della news: naturalmente l'ultima news si accoda al resto e sia visualizzando in php che in swf questa rimane in fondo.
Cosa posso fare?
Modificare il php in modo che l'xml venga scritto gia' ordinato (e fornisca i dati belli pronti all'swf) o modificare l'actionscript perche' li riordini prima della visualizzazione?
In questo caso ho trovato una funzione che si chiama sortOn che lavora sull'array, ma una volta implementata, non mi da' alcun risultato. Dove sbaglio?

Codice:
// --
System.useCodepage=true;
import TextField.StyleSheet;
news.autoSize = true;
news.html = true;
news.htmlText = "Sto caricando..";
//creo e inizializzo css
var myCSS:StyleSheet = new StyleSheet();
myCSS.setStyle("em", {fontWeight:'bold',color:'#000000'});
myCSS.setStyle("h6", {fontWeight:'normal',color:'#000000'});
news.styleSheet = myCSS;
news.htmlText = this.news;
// --
var nNews:XML = new XML();
nNews.ignoreWhite = true;
nNews.load('news.xml');
nNews.onLoad = function() {
	news.htmlText = "";
	qtd = this.childNodes[0].childNodes.length;
	for (i=0; i<qtd; i++) {
		nNews.push([qtd[i].childNodes[0].childNodes, qtd[i].childNodes[1].childNodes, qtd[i].childNodes[2].childNodes]);
	}
	nNews.sortOn([0], Array.NUMERIC);
	for (i=0; i<qtd; i++) {
		var nData = (this.childNodes[0].childNodes[i].childNodes[0]);
		var nTitolo = (this.childNodes[0].childNodes[i].childNodes[1]);
		var nTesto = (this.childNodes[0].childNodes[i].childNodes[2]);
				news.htmlText += +nData+"<br />"+"<em>"+nTitolo+"</em>"+nTesto+"<br/><br/>";
	}
	
};

Magari col php e' piu' semplice, non so.
Cosa mi consigli?
 
Ultima modifica di un moderatore:
Discussioni simili
Autore Titolo Forum Risposte Data
A CMS semplice ed economico CMS (Content Management System) 0
JACK1971 Un CMS semplice CMS (Content Management System) 3
M Semplice visualizzatore di immagini [risolto con plugin wp] PHP 7
L [PHP] cambiare gli if in un url semplice PHP 1
L [PHP] convertire gli url ad forma semplice PHP 3
G Caricare una semplice Jpg con il PHP PHP 1
Federico.Marcelo qual è il modo più semplice per creare file GIF di alta qualità? Webdesign e Grafica 4
V Semplice barra di ricerca con filtro categorie prodotti E-Commerce 0
Z Semplice area privata in php PHP 6
M Un semplice saluto Presentati al Forum 1
T Visualizzare un Xml su un sito in modo semplice XML 1
X [Photoshop] Cercasi strumento per ottenere un semplice effetto. Photoshop 6
J [PHP] sviluppare una semplice calcolatrice PHP 1
booklisa [PHP] Domanda semplice (apparantemente) PHP 4
R [PHP] Semplice form PHP 4
G [CERCO][Retribuito] Programmatore Windows per un semplice software Offerte e Richieste di Lavoro e/o Collaborazione 0
MarcoGrazia Costruire una semplice chat in PHP non è affatto semplice. PHP 3
G aiuto per semplice menu onclick HTML e CSS 6
T Problema Semplice Script Javascript 1
Mr. Alex D. Creazione semplice autorisponditore con redirect PHP 1
steak Casella di ricerca completa, invece di semplice ricerca tra tag HTML e CSS 0
A Semplice applicazione con le facebook api PHP 1
Pi3tro [Richiesta]Semplice form PHP 6
R galleria immagini semplice a schermo intero jQuery 1
C Creare semplice timer in Visual Basic Visual Basic 0
Trapano Galleria immagini semplice PHP 5
S problema con ajax semplice login script Javascript 8
L [Java] Consigli progettuali per una semplice applicazione Java 6
Trapano query semplice? PHP 21
M Semplice pagina per inserire/leggere dati su database PHP 5
E semplice ciclo if!??!?!? :dipser: MS Access 0
L login semplice con array PHP 10
L Semplice giochino javascript Javascript 20
N Menu verticale semplice stile Yahoo WordPress 2
A una guida semplice in php PHP 2
L guida semplice per imparare jquery jQuery 5
A problema con un semplice form per un loggin in php PHP 2
D Redirect: come mai non funziona un semplice redirect? Apache 0
N Semplice timer Snippet PHP 0
P inizio con il php ... semplice aiuto!! PHP 12
L Semplice esercizio funzioni JavaScript Javascript 5
borgo italia phishing o malware o semplice truffa? Discussioni Varie 0
P Galleria immagini semplice Javascript 5
Web Designer Semplice Tutorial Photoshop Effetto Fantasma Photoshop 1
ste80 Problemuccio con semplice guestbook PHP 4
S semplice query che non funziona :( PHP 3
criric Semplice calendario Snippet PHP 0
S semplice link che però non compare dentro ad un DIV HTML e CSS 3
L aiuto per questa semplice regex PHP 5
S Semplice domanda con Javascript Javascript 3

Discussioni simili