Seite 1 von 2

datenbank werte auslesen

Verfasst: Di 27. Dez 2005, 12:32
von mvf
hoffe alle hatten ein frohes fest und sind nicht allzu gesättigt
[voller bauch studiert ja nicht gern ;) ]

ich möchte gerne eine kleine übersicht abbilden
  • contenido version
    anzahl layouts in use
    anzahl templates in use
    anzahl module in use
dazu habe ich ein modul 'info' angelegt und nachfolgenden code in den output geschrieben.

3 Fragen dazu:
I.) wie liest man bitte den wert eines 'Memo' feldes aus (für die version) ?
II.) bei mir wird die anzahl der templates nicht ausgegeben, obwohl ein template existiert ?
III.) stelle ich mich da jetzt sehr ... sagen wir ungeschickt ;) an ... sprich geht das ganze kürzer/eleganter ?

Code: Alles auswählen

<?php

$db = new DB_Contenido;
$db1 = new DB_Contenido;
$db2 = new DB_Contenido;
$db3 = new DB_Contenido;

                $sql = "SELECT value as Value FROM " . $cfg["tab"]["system_prop"] ;
                $sql1 = "SELECT COUNT(*) as Value1 FROM " . $cfg["tab"]["lay"] ;
                $sql2 = "SELECT COUNT(*) as Value2 FROM " . $cfg["tab"]["template"] ;
                $sql3 = "SELECT COUNT(*) as Value3 FROM " . $cfg["tab"]["mod"] ;

$db->query($sql);
$db->next_record(); 

$db1->query($sql1);
$db1->next_record(); 

$db2->query($sql2);
$db2->next_record(); 

$db3->query($sql3);
$db3->next_record(); 

$version = $db1->f("Value");
$count_lay = $db1->f("Value1");
$count_template = $db2->f("Value2");
$count_mod = $db3->f("Value3");

echo "<div style=\"float:left;width:75%;\">Version:</div><div style=\"float:right;width:25%;text-align:right;\">".$version."</div>";
echo "<div style=\"float:left;width:75%;\">Layouts:</div><div style=\"float:right;width:25%;text-align:right;\">".$count_lay."</div>";
echo "<div style=\"float:left;width:75%;\">Templates:</div><div style=\"float:right;width:25%;text-align:right;\">".$count_template."</div>";
echo "<div style=\"float:left;width:75%;\">Module:</div><div style=\"float:right;width:25%;text-align:right;\">".$count_mod."</div>";


?>
'in use' ist im sql noch nicht berücksichtigt ;) wäre ja froh wenn ich zunächst mal alle daten abbilden hönnte :?
wie immer besten dank für euren input

Verfasst: Di 27. Dez 2005, 14:05
von stese
bitte sehr:

Code: Alles auswählen

<?php

$db = new DB_Contenido;

$arr_information = array();

$sql = "SELECT value FROM " . $cfg["tab"]["system_prop"] . " WHERE type='system' AND name='version'";
$db->query($sql);


// versionsnummer ist in db vorhanden
if ( $db->num_rows() > 0) {
	$db->next_record();
	$arr_information["version"] = $db->f("value");
} else {
	// wenn nicht, nimm versionsnummer aus der config
	$arr_information["version"] = $cfg['version'];
}



$arr_tpl = array();
// alle benutzten templates in kategorien finden:
$sql = "SELECT tc.idtpl from " . $cfg["tab"]["cat_lang"] . " cl left join " . $cfg["tab"]["tpl_conf"] . " tc on cl.idtplcfg = tc.idtplcfg WHERE tc.idtpl <> 'null' Group by (tc.idtpl) order by tc.idtpl asc";
$db->query($sql);
while ( $db->next_record()) {
	$arr_tpl[] = $db->f("idtpl");
}


// alle benutzten templates in artikeln finden:
$sql = "SELECT tc.idtpl from " . $cfg["tab"]["art_lang"] . " al left join " . $cfg["tab"]["tpl_conf"] . " tc on al.idtplcfg = tc.idtplcfg WHERE tc.idtpl <> 'null' Group by (tc.idtpl) order by tc.idtpl asc";
$db->query($sql);
while ( $db->next_record()) {
	$arr_tpl[] = $db->f("idtpl");
}

// array bereinigen von doppelten elementen
$arr_tpl = array_unique($arr_tpl);
$arr_information["used_templates"] = count($arr_tpl);


// alle layouts herausfinden
$arr_tpl_ids = array();
$arr_lay = array();
foreach ( $arr_tpl  as $int_idtpl ) {
	$arr_tpl_ids[] = "idtpl = '" . $int_idtpl . "'";
}
if (count($arr_tpl_ids)> 0) {
	$sql = "SELECT idlay FROM " . $cfg["tab"]["tpl"] . " WHERE ( " . implode(" OR ", $arr_tpl_ids) . " ) GROUP BY idlay ORDER BY idlay ASC";
	$db->query($sql);

	while ($db->next_record()) {
		$arr_lay[] = $db->f("idlay");
	}
	
	$arr_information["used_layouts"] = count($arr_lay);
	
} else {
	$arr_information["used_layouts"] = "0";
}



// finde module
$arr_mod = array();
if (count($arr_tpl_ids)> 0) {
	$sql = "SELECT idmod FROM " . $cfg["tab"]["container"] . " WHERE  idmod  <> 'null' AND ( " . implode(" OR ", $arr_tpl_ids) . " ) GROUP BY idmod ORDER BY idmod ASC";
	$db->query($sql);
	
	while ($db->next_record()) {
		$arr_mod[] = $db->f("idmod");
	}

	$arr_information["used_modules"] = count($arr_mod);
	
} else {
	$arr_information["used_modules"] = "0";
}


// ausgabe

echo "<div style=\"float:left;width:75%;\">Version:</div><div style=\"float:right;width:25%;text-align:right;\">".$arr_information["version"]."</div>";
echo "<div style=\"float:left;width:75%;\">Layouts:</div><div style=\"float:right;width:25%;text-align:right;\">".$arr_information["used_layouts"]."</div>";
echo "<div style=\"float:left;width:75%;\">Templates:</div><div style=\"float:right;width:25%;text-align:right;\">".$arr_information["used_templates"]."</div>";
echo "<div style=\"float:left;width:75%;\">Module:</div><div style=\"float:right;width:25%;text-align:right;\">".$arr_information["used_modules"]."</div>";


?>
ich empfehle dir ein mysql buch, wenn du vor hast, contenido öffter einzusetzen und webauftritte über die basis hinaus einsetzen willst, denn dann wird das auch was mit deinen querys ;)

Verfasst: Di 27. Dez 2005, 14:55
von mvf
stese hat geschrieben:ich empfehle dir ein mysql buch, wenn du vor hast, contenido öffter einzusetzen und webauftritte über die basis hinaus einsetzen willst, denn dann wird das auch was mit deinen querys ;)
und wieder ein bier ;)
habe die letzten nicht vergessen, aber ich war seit dem auch noch nicht in muc und wie ich mitbekommen habe, warst auch du nich ganz auf dem posten :? hoffe es geht dir wieder besser! ui, und wünsche natürlich fohes fest gehabt zu haben

stese merci! du bist '2 fast 4 me' ;)

ich bin ja fleissig am lernen und als alter autodidakt und selfmademan darf ich Faruk Ates zitieren, der da sagt
In life, there are generally two options you have when you want to learn something: either you learn by reading all the available material, or you learn in a practical, trial-by-error manner through simply doing it. Both have their advantages and disadvantages, but when it comes to learning CSS, the method that I consider works best is the latter approach, also known as the Nike way: just do it.
mit css funktioniert(e) das ganz gut, bei sql und php wird es dann schon enger.

aber dank deiner hilfe, dem board hier und all seinen mitgliedern, dem mysql manual, php.net und und und... werde auch ich step-by-step wiser :)

thx again

Verfasst: Di 27. Dez 2005, 15:06
von stese
;) das klappt bei php und mysql auch - allerdings sollte man dort doch schon bissl was dazu lesen, da ein klein wenig umfangreicher.

aber wenn das modul dir hilft isses schön. man kann es sogar dahingehend erweitern, dass er dir auch sagt, welche templates und welche module bzw layouts er verwendet hat. ist vielleicht für eine interne debug funktion ab und an ganz nützlich.

Verfasst: Mi 28. Dez 2005, 18:48
von mvf
in der tabelle '_container' wird beim count der idmod auch '0' mitgezählt, daher gibt der wert immer Module+1 aus, habe daher ein simples -1 zum count($arr_mod) hinzugefügt.

Code: Alles auswählen

// finde module
$arr_mod = array();
if (count($arr_tpl_ids)> 0) {
	$sql = "SELECT idmod FROM " . $cfg["tab"]["container"] . " WHERE ( " . implode(" OR ", $arr_tpl_ids) . " ) GROUP BY idmod ORDER BY idmod ASC";
	$db->query($sql);
	
	while ($db->next_record()) {
		$arr_mod[] = $db->f("idmod");
	}

	$arr_information["used_modules"] = (count($arr_mod)-1); // einzige änderung
	
} else {
	$arr_information["used_modules"] = "0";
}

Verfasst: Mi 28. Dez 2005, 19:02
von stese
danke, habs mal im script oben entsprechend abgeändert, dass es gehen müsste

Verfasst: Mi 28. Dez 2005, 19:18
von mvf
stese hat geschrieben:..habs mal im script oben entsprechend abgeändert
:? und natürlich eleganter ;)

Verfasst: Do 29. Dez 2005, 16:10
von mvf
stese hat geschrieben:man kann es sogar dahingehend erweitern, dass er dir auch sagt, welche templates und welche module bzw layouts er verwendet hat. ist vielleicht für eine interne debug funktion ab und an ganz nützlich.
hallo stese
servus community

eine liste der namen der aktuell eingesetzten module habe ich bereits umsetzen können ( http://contenido.funjumping.de/cms/fron ... hp?idcat=8 ), allerdings habe ich ein neues problem mit dem auslesen des input und outputcodes :?

ich kann den code zwar einigemassen abbilden (so wie dieser z.b. im memofeld output eines moduls in der tabelle mod steht) allerdings werden kommentare z.b. nicht abgebildet.

beispiel - original output des moduls HTML(Headline) in der DB

Code: Alles auswählen

<?php 
/***********************************************
* Headline Output
*
* Author      :     Andreas Lindner
* Copyright   :     four for business AG
* Version	  : 	1.0
* Created     :     05-08-2005
************************************************/

$editmode = false;
if($contenido&&($view=="edit")){
	$editmode = true;
}

if (!editmode) {
    echo "<h1 class="content">".strip_tags("CMS_HTMLHEAD[1]")."</h1>";
} else {
    echo "<h1 class="content">"."CMS_HTMLHEAD[1]"."</h1>";
}
?>
mein versuch der original abbildung:

Code: Alles auswählen

<?php

$db = new DB_Contenido;

$arr_information = array();


// finde module 'name'

$sql = "SELECT output FROM " . $cfg["tab"]["mod"] . " WHERE idmod  = '1' ";

   $db->query($sql);
   
   $db->next_record();
   $output = $db->f("output");
   
$output = nl2br($output);

// ausgabe
echo "<h1>Modul:</h1>";
echo "<div style="clear:both;float:left;">" . $output . "</div>";

?>
resultiert aber nur in einer ausgabe die folgendermassen aussieht
http://contenido.funjumping.de/cms/fron ... hp?idcat=9

wie man sieht nicht 1:1 und vor allem wird der code nicht nur abgebildet sondern auch teilweise abgearbeitet (z.b. <?php fehlt und <h1> wird auch als h1 ausgegeben ...)

ich hoffe ich erkläre mich verständlich :?

ziel ist den output aus dem db feld 1:1 abzubilden so wie hier im board als code z.b.

merci für eure unterstützung

Verfasst: Do 29. Dez 2005, 16:20
von stese
schreib die letzte zeile mal so:

Code: Alles auswählen

echo "<div style=\"clear:both;float:left;\">" . htmlentities($output) . "</div>";

Verfasst: Do 29. Dez 2005, 16:29
von mvf
besser aber eben nicht ganz, denn jetzt zerschmeisst es wieder den nl2br :(
http://contenido.funjumping.de/cms/fron ... hp?idcat=9
und macht aus den zeilenumbrüchen <br />

habe mit meinen bescheidenen php kenntnissen gestern nacht schon viel mit

# html_entity_decode
# htmlentities
# htmlspecialchars_decode
# htmlspecialchars
# nl2br

versucht aber noch will es nicht :(

Verfasst: Do 29. Dez 2005, 16:33
von stese
dann schreibe es mal so:

Code: Alles auswählen

echo "<div style=\"clear:both;float:left;\"><pre>" . htmlentities($output) . "</pre></div>";

Verfasst: Do 29. Dez 2005, 16:36
von mvf

Code: Alles auswählen

<?php

$db = new DB_Contenido;

$arr_information = array();


// finde module 'name'

$sql = "SELECT output FROM " . $cfg["tab"]["mod"] . " WHERE idmod  = '1' ";

   $db->query($sql);
   
   $db->next_record();
   $output = $db->f("output");
   
$output = htmlentities($output);

// ausgabe
echo "<h1>Modul:</h1>";
echo "<div style=\"clear:both;float:left;\">" . nl2br($output) . "</div>";

?>
jetzt habe ich's :) danke stese !!!

htmlentities und nl2br in umgekehrter reihenfolge dann passt es :)

http://contenido.funjumping.de/cms/fron ... hp?idcat=9

Verfasst: Do 29. Dez 2005, 16:38
von stese
naja es geht auch mit dem pre tag - dafür isser ja da ... ausserdem kann man den dann noch explizip per css formatieren

Verfasst: Do 29. Dez 2005, 16:39
von mvf
stese hat geschrieben:naja es geht auch mit dem pre tag - dafür isser ja da ... ausserdem kann man den dann noch explizip per css formatieren
verstehe, werde das auch mal versuchen, danke

Inhalte

Verfasst: Mi 17. Mai 2006, 09:49
von 7UPandDown
Hallo,
Könnte man diese Ausgabe noch auf die Anzahl der Kategorien und Artikel erweitern??
Im Adminbereich wird zwar die Artikelanzahl angezeigt, aber im Modul währe es noch besser.
Gruss
Michael