Würde gerne einen Center Block erstellen welcher zwei Blöcke
included hat.
Unzwar Random Pic und den Content Block.
Geht sowas?
Moin Kevke :)
das geht:
Alle Blöcke erzeugen ja, wenn man sie includet eine Variable $content.
php
include("blocks/block-irgendwas_1.php");
$out1 = $content;
unset($content);
include("blocks/block-irgendwas_2.php");
$out2 = $content;
$content = $out1.$out2;
$blockfiletitele = "Der Titel für den Block";
So ich greif das Theme wieder mal auf und zwar hab ich auch sowas vor bloss das sich bei mir die blöcke die angezeigt werdenm sollen im Admin bereich einstellen lassen.
Nun hab alles schön erstellt bloss bleibt der center Block leer und die die blöcke die darin angezeigt werden sollen werden links angezeigt:-(
Hier mal der code:
if (eregi("cblocks1.php", $_SERVER['PHP_SELF'])) {
Header("Location: ../index.php");
die();
}
global $bgcolor1, $bgcolor2, $prefix;
$cbinfo = sql_fetch_array(sql_query("select * from ".$prefix."_nsncb_config where cgid='1'"));
if ($cbinfo['enabled'] == '1') {
if ($cbinfo['height'] <> "") { $cheight = "height='".$cbinfo['height']."' "; } else { $cheight = ""; }
$content = "<table width='100%' ".$cheight."border='0' cellspacing='1' cellpadding='0' bgcolor='$bgcolor2'><tr><td valign='top'>\n";
$content .= "<table width='100%' ".$cheight."border='0' cellspacing='1' cellpadding='4' bgcolor='$bgcolor1'><tr>";
$result3 = sql_query("SELECT * FROM ".$prefix."_nsncb_blocks WHERE cgid='1' ORDER BY cbid");
while($cbidinfo = sql_fetch_array($result3)) {
if ($cbidinfo['cbid'] <= $cbinfo['count']) {
if ($cbidinfo['wtype'] == '0') {
$content .= "<td width='".$cbidinfo['width']."' valign='top' align='center'>\n";
} else {
$content .= "<td width='".$cbidinfo['width']."%' valign='top' align='center'>\n";
}
cb_blocks($cbidinfo['rid']);
$content .= "</td>\n";
}
}
$content .= "</tr></table>\n";
$content .= "</td></tr></table>\n";
$content .= "<br>";
}
hi
ist das nicht der centerblock von NSN ???
Jupps das ist er. Wobei ist eigentlich kein block da er ja included wird im header und footer. Daher wollte ich denn als richtig block haben das man den kram besser positionieren kann.
Moin :)
wenn die Blockinhalte links ausgegeben wérden, dann wird das bestimmt durch einen Echo-Befehl ausgelöst.
Was macht denn die Funktion cb_blocks() ?
Der Rest von dem Code sieht eigentlich normal aus...
In der funktion ist nix von echos zu sehen ist nur ne abfrag ob block da oder nicht.
Jop, aber irgendwo / irgendwas muss den Inhalt der Variablen $content ja ausgeben...
global $prefix, $bgcolor1, $bgcolor2;
$cbinfo = sql_fetch_array(sql_query("select * from ".$prefix."_nsncb_config where cgid='1'"));
if ($cbinfo['enabled'] == '1') {
if ($cbinfo['height'] <> "") { $cheight = "height='".$cbinfo['height']."' ";
} else
{
$cheight = "";
}
$content = "<table width='100%' ".$cheight."border='0' cellspacing='1' cellpadding='0' align='center'><tr><td valign='top' align='center'>\n";
$content .= "<table width='100%' ".$cheight."border='0' cellspacing='1' cellpadding='4' align='center'><tr>";
$result3 = sql_query("SELECT * FROM ".$prefix."_nsncb_blocks WHERE cgid='1' ORDER BY cbid");
while($cbidinfo = sql_fetch_array($result3)) {
if ($cbidinfo['cbid'] <= $cbinfo['count']) {
if ($cbidinfo['wtype'] == '0') {
$content .= "<td width='".$cbidinfo['width']."' valign='top' align='center'>\n";
} else {
$content .= "<td width='".$cbidinfo['width']."%' valign='top' align='center'>\n";
}
$content .= cb_blocks($cbidinfo['rid']);
$content .= "</td>\n";
}
}
$content .= "</tr></table>\n";
$content .= "</td></tr></table>\n";
$content .= "<br>";
}
so sieht im mom mein block hinhalt aus
und so m die function cb_blocks:
function cb_blocks($rid) {
global $prefix, $db, $admin, $user;
$sql = "SELECT * FROM ".$prefix."_nsncb_blocks WHERE rid='$rid'";
$result = sql_query($sql);
while($row = sql_fetch_array($result)) {
$title = $row['title'];
$filename = $row['filename'];
$content = $row['content'];
if ($filename == "" AND $content > "") {
themecenterbox($title, $content);
} elseif ($filename > "" AND $content == "") {
$file = @file("blocks/$filename");
if (!$file) {
$content = _BLOCKPROBLEM;
} else {
include("blocks/$filename");
}
if ($content == "") { $content = _BLOCKPROBLEM2; }
themecenterbox($title, $content);
} elseif ($filename == "" AND $content == "") {
$content = _BLOCKPROBLEM2;
themecenterbox($title, $content);
}
}
}
Mal sehen ob du da was sieht weil der hinghalt wird immer noch rechts angezeigt.
Ja ich weiss ihr habt viel um die Ohren aber das wäre mir doch jetzt mal wichtig.
Moin :)
du kriegst jetzt nicht die lösung, sondern nur nen kleinen Stuppser.
themecenterbox($title, $content);
Schau mal, was die Funktion themecenterbox() macht ;)
Zitatwenn die Blockinhalte links ausgegeben wérden, dann wird das bestimmt durch einen Echo-Befehl ausgelöst.
Was macht denn die Funktion cb_blocks() ?
Jo aber die themecenterbox benutzt doch nur echo´s wenn die function thememiddlebox nicht vorhanden ist. Also müsste ich die thememiddlebox auf $content abändern?
Nachtrag: Sauerei heute hängt es wieder total also die echos in beiden funktionen müssen bleiben sonst geht ja garnix mehr. Geb mal noch einen Tip bitte:-)
Ach noch was der Inhalt wird links untereinander angezeigt also schon ganz anderst wie es im block selbst eigentlich erstellt ist. wenn ich es mit echo mache wird er auch links angezeigt aber die darstellung stimmt wenigtens;-)
Zitat von: NeMeSiSX2LC in 04 November 2004, 08:18:52
Ja ich weiss ihr habt viel um die Ohren aber das wäre mir doch jetzt mal wichtig.
Mach auch nicht wieder aber würde mich jetzt doch mal interessieren.
ZitatJo aber die themecenterbox benutzt doch nur echo´s wenn die function thememiddlebox nicht vorhanden ist. Also müsste ich die thememiddlebox auf $content abändern?
Nachtrag: Sauerei heute hängt es wieder total also die echos in beiden funktionen müssen bleiben sonst geht ja garnix mehr. Geb mal noch einen Tip bitte:-)
Ach noch was der Inhalt wird links untereinander angezeigt also schon ganz anderst wie es im block selbst eigentlich erstellt ist. wenn ich es mit echo mache wird er auch links angezeigt aber die darstellung stimmt wenigtens;-)
Sorry, aber da versteh ich jetzt garnix.....
Tatsache ist, dass themecenterbox und thememiddlebox die Ausgaben per echo ausgeben. Dadurch landet die Ausgabe nicht in der Variablen $content sondern werden bereits beim generieren des Blocks, ausserhalb der theme-Haupttabelle ausgegeben.
Eine Möglichkeit das zu umgehen, wäre die Ausgabe in den Ausgabepuffer zwischenzuspeichern und das dann in die Variable zu lenken....
Stichwort ob_start()
ZitatSorry, aber da versteh ich jetzt garnix.....
Tatsache ist, dass themecenterbox und thememiddlebox die Ausgaben per echo ausgeben. Dadurch landet die Ausgabe nicht in der Variablen $content sondern werden bereits beim generieren des Blocks, ausserhalb der theme-Haupttabelle ausgegeben.
Eine Möglichkeit das zu umgehen, wäre die Ausgabe in den Ausgabepuffer zwischenzuspeichern und das dann in die Variable zu lenken....
Stichwort ob_start()
Das verstehe ich nun wieder nicht wo soll die ausgabe gepuffert werden? Im Block
Ach ist es nicht schön wenn die Kommunikation Funktioniert?
Hallo !
ZitatDas verstehe ich nun wieder nicht wo soll die ausgabe gepuffert werden? Im Block
Guckst Du in der PHP-Dokumentation nach
ob_start --->
ZitatThis function will turn output buffering on. While output buffering is active no output is sent from the script (other than headers), instead the output is stored in an internal buffer.
The contents of this internal buffer may be copied into a string variable using ob_get_contents(). To output what is stored in the internal buffer, use ob_end_flush(). Alternatively, ob_end_clean() will silently discard the buffer contents.
An optional output_callback function may be specified. This function takes a string as a parameter and should return a string. The function will be called when ob_end_flush() is called, or when the output buffer is flushed to the browser at the end of the request. When output_callback is called, it will receive the contents of the output buffer as its parameter and is expected to return a new output buffer as a result, which will be sent to the browser.
Note:
In PHP 4.0.4, ob_gzhandler() was introduced to facilitate sending gz-encoded data to web browsers that support compressed web pages. ob_gzhandler() determines what type of content encoding the browser will accept and will return it's output accordingly.
Output buffers are stackable, that is, you may call ob_start() while another ob_start() is active. Just make sure that you call ob_end_flush() the appropriate number of times. If multiple output callback functions are active, output is being filtered sequentially through each of them in nesting order.
ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() and ob_start() may not be called from a callback function. If you call them from callback function, the behavior is undefined. If you would like to delete the contents of a buffer, return "" (a null string) from callback function.
MfG
jubilee
Joa schon klar aber wo einsetzen das leuchtet mir grad nicht ein
Hier die ungetestete, aber von unnötigem Kram befreite, Version der Funktion:
<?php
function cb_blocks($rid) {
global $prefix;
$sql = "SELECT * FROM ".$prefix."_nsncb_blocks WHERE rid='".intval($rid)."'";
$result = sql_query($sql);
$row = sql_fetch_array($result);
if (empty($row['filename']) && !empty($row['content'])) {
$content = $row['content'];
} elseif (!empty($row['filename']) && empty($row['content'])) {
if (is_file("blocks/".$row['filename'])) {
include("blocks/".$row['filename']);
} else {
$content = _BLOCKPROBLEM;
}
if (empty($content)) {
$content = _BLOCKPROBLEM2;
}
ob_start();
themecenterbox($row['title'], $content);
return ob_get_clean();
}
?>
Wobei ich mir nicht ganz sicher bin, ob das nicht noch einfacher geht. Die DB-Abfrage in der Funktion müsste eigentlich unnötig sein, weil beim Aufruf die Tabelle ja schonmal abgefragt wurde....
Aber that's nuke live...
so also die blöcke sind schonmal da wo sie sein soll aber darunter steht jetzt das
Fatal error: Cannot use object of type stdClass as array in \includes\mx_baseconfig.php on line 154
ob_start();
themecenterbox($row['title'], $content);<<<<< 154
return ob_get_clean();
Aja wenn man es so macht
$title = $row['title'];
ob_start();
themecenterbox($title $content);
return ob_get_clean();
Dann gehts
Zitatmx_baseconfig.php on line 154
??? hääää ???
Na weil ich da die funktion drin sitzen hab
Zitat von: NeMeSiSX2LC in 05 November 2004, 11:09:39
Na weil ich da die funktion drin sitzen hab
Ohne Worte....
Was denn eine file für functionen sowie my_header gibt es ja nicht
Zitat von: NeMeSiSX2LC in 05 November 2004, 13:01:00
Was denn eine file für functionen sowie my_header gibt es ja nicht
Naja man kann ja auch selbst eine Datei schreiben und includen! ;)
So gehts doch auch für was heisst das teil schliesslich baseconfig?