mehrere Datein hintereinander includen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
seatfriend
Mitglied
Beiträge: 45
Registriert: 26.05.2009 12:15
Wohnort: Erzgebirge

Re: mehrere Datein hintereinander includen

Beitrag von seatfriend »

gn#36 hat geschrieben:Die Templates werden nur geparst, wenn du sie mit den Methoden des $template Objekts ausgibst.
Was heißt das genau für mich?
gn#36 hat geschrieben:Du könntest die Ausgabe deines Skriptes per Ausgabepufferung ([php:ob_start], [php:ob_get_contents] und co.) in eine Variable schreiben
Mh soweit vom Sinn verstanden. könntest du mir evtl ein Beispiel geben oder einen Lösungsansatz, damit ich weiß wie ichs machen muss?
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: mehrere Datein hintereinander includen

Beitrag von gn#36 »

Naja ein bisschen was musst du auch selbst machen. Wie du $template benutzt kannst du in dem von Frank verlinkten Artikel sehen (oder in veralteter Form genauer erklärt KB:template_system, KB:template_syntax). ob_start und ob_get_contents habe ich verlinkt damit du dort nachlesen kannst wie sie funktionieren. Aber zur Übersicht ein einfaches Beispiel:

Code: Alles auswählen

ob_start();
echo "Huhu, es ist " . date('H:i') . " Uhr.";
$variable = ob_get_contents();
ob_end_clean();
$variable = "Das hier wird vor die Ausgabe gesetzt... " . $variable;
echo $variable; 
Wenn du das ausführst sollte - sofern mir auf die Schnelle kein Fehler unterlaufen ist - die Ausgabe so aussehen: "Das hier wird vor die Ausgabe gesetzt... Huhu, es ist xx:yy Uhr." ob_start unterbricht die Ausgabe und speichert alles zwischen, per ob_get_contents kannst du den Kram auslesen und per ob_end_clean löscht du den Puffer ohne ihn auszugeben. Die Daten hast du dann in der Variable liegen und kannst sie vor der Ausgabe noch beliebig manipulieren - wie hier geschehen indem ich noch was davor gesetzt habe. Du kannst dann natürlich auch statt echo andere Methoden verwenden das endgültig auszugeben - also z.B. auch $template->set_var('VARIABLE',$variable); oder ähnliches.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
seatfriend
Mitglied
Beiträge: 45
Registriert: 26.05.2009 12:15
Wohnort: Erzgebirge

Re: mehrere Datein hintereinander includen

Beitrag von seatfriend »

Ich habe jetzt vorbereitet:

1. Mein PHP-Script zur auslesung der Benutzerrechte, Template und Lang-Datei Setzen:

Code: Alles auswählen

<?php
/**
*
* @author Leon.C-SM194 admin@seatfriends-bautzen.de - http://www.seatfriends-bautzen.de
*
* @package {memberupload}
* @version 1.0
* @copyright (c) 2010 Seatfriends-Bautzen
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
define('IN_PHPBB', true);
// Specify the path to you phpBB3 installation directory.
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './forum/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
// The common.php file is required.
include($phpbb_root_path . 'common.' . $phpEx);

// since we are grabbing the user avatar, the function is inside the functions_display.php file since RC7
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);

// Session auslesen und Benutzer-Informationen laden
$user->session_begin();  // Session auslesen
$auth->acl($user->data); // Benutzer-Informationen laden

// Sprachvariablen aus eigener Sprach Datei laden
$user->setup('mods/member_upload_lang'); // Sprachvariablen aus eigener Sprach Datei laden

//Funktion Gruppenzugehörigkeit laden
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);

$gruppen_id = 7;  // zu überprüfende Gruppen ID (Gruppen ID 7 = Mitglieder  )
$benutzer_id = $user->data['user_id']; // zu überprüfender User (Der User, der diese Seite aufgerufen hat )
$is_in_group = group_memberships($gruppen_id, $benutzer_id , true);  // Nun erfolgt die eigentliche Prüfung:

//Programmierung--------------------------------------------------------------------

if ($user->data['user_id'] == ANONYMOUS)
{
        login_box();
}


else if ($is_in_group == true)
{
	// Teile dem Template System mit, das die Variable "S_IN_GROUP" den Wert TRUE bekommt
    // In der html Datei kann mit <!-- IF S_IN_GROUP -->  und <!-- ENDIF --> ein Bereich markiert werden.
   $template->assign_var('S_IN_GROUP', true);
}
else
{
	// Teile dem Template System mit, das die Variable "S_IN_GROUP" den Wert FALSE bekommt
   $template->assign_var('S_IN_GROUP', false);
}
endif;

//Programmierung Ende--------------------------------------------------------------------


// Seiten Titel, diese Sprach Variable sollte in der Sprach Datei,
// welche weiter oben genannt wurde, definiert sein.
page_header($user->lang['MEIN_TITEL']);


// Das ist der Name der Template-Datei in /styles/<style>/templates/.
$template->set_filenames(array(
    'body' => 'member_upload_templ.html',
));

// Komplettierung des Scriptes und Ausgabe
page_footer();

?>
(hier bin ich mir noch nicht sicher ob ich 'S_IN_GROUP' auch ein false zuweisen kann, oder ob der TRUE-Teil reicht)

2. Meine Sprachdatei:

Code: Alles auswählen

<?php
/**
*
* @author Leon.C-SM194 admin@seatfriends-bautzen.de - http://www.seatfriends-bautzen.de
*
* @package {memberupload}
* @version 1.0
* @copyright (c) 2010 Seatfriends-Bautzen
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* DO NOT CHANGE
*/
if (!defined('IN_PHPBB'))
{
    exit;
}

if (empty($lang) || !is_array($lang))
{
    $lang = array();
}

$lang = array_merge($lang, array(
    'MY_TITLE'     			=> 'Dateiupload fuer Mitglieder',

    'title' 				=> 'Data Uploader - Bilder hochladen',
	'ersetzen_text' 		=> 'Bild/Datei ersetzen',
	'erlaubt' 				=> 'Erlaubte Dateitypen: jpg, jpeg, gif, png, zip und rar bis 50 MB Größe!',
	'upload_subm_button'	=> 'Bild hochladen';
	'error_headline' 		=> 'Fehler:',
	'invalid_file_type'		=> 'ungültiges Dateiformat ([file_type])',
	'file_too_large' 		=> 'Datei zu groß ([size] KB)',
	'image_too_large' 		=> 'Bild zu groß ([width] x [height])',
	'file_already_exists' 	=> 'die Datei <b>[file]</b> existiert bereits',
	'upload_successful' 	=> 'Die Datei <b>http://www.seatfriends-bautzen.de/forum/uploads/[file]</b> wurde erfolgreich hochgeladen!',
	'upload_not_successful' => '<b>Fehler:</b> Die Datei <b>[file]</b> konnte nicht gespeichert werden!',
	'load_up_another_file' 	=> "Ein weiteres Bild hochladen:",
	'content_list' 			=> "Der aktuelle Inhalt des Zielordners",
	'delete_file' 			=> 'Bild/Datei löschen',
	'delete_all' 			=> 'Alle Bilder/Dateien löschen',
	'delete_file_caution' 	=> ' konnte nicht gelöscht werden!',
	'delete_file_successful'=> ' wurde gelöscht!',
	'show_file' 			=> 'Bild/Datei öffnen/ansehen',
	'start_img_resizer' 	=> "Image Resizer starten",
	'head_img_resizer' 		=> "Nach Ende des Uploads",
));

?>
(hier bin ich mir nicht sicher ob ich die Sprachvariablen aus dem Upload-Teil gleich mit reinschreiben muss)

und 3. Mein Template (ganz einfach):

Code: Alles auswählen

<!-- INCLUDE overall_header.html -->

<!-- IF S_IN_GROUP --> 
 <br>
    <table width="100%" border="3" bordercolor="#FF8000" bgcolor="#ECF4EF" cellpadding="0" cellspacing="2">
           <tr>
           <td>
           
           {UPLOAD_SCRIPT}
           
           <font color=#000000 face="arial" size="big">Der Löschen&#45Button &#40;X&#41; ist nur für den Administrator!</font color>

							<br><br><br><br><br>
			</td>
			</tr>
	</table>
	
 <!-- ELSE -->
<table width="100%" border="3" bordercolor="#000000" bgcolor="#F90000" cellpadding="0" cellspacing="2">
           <tr>
           <td>
           <center><h1> <font face="Comic Sans MS" color=#F0F51B size="20"> Zugriff verweigert</font></h1>
           <br><br><br><br>
           <b><p>Leider besitzen sie nicht die n&ouml;tigen Rechte auf diese Seite zuzugreifen. Der Zugriff wurde verweigert.</p></font></b>
           <br><br><br><br><br><br>
                      </center>
                      <br><br><br><br>
                   </td>
                     </tr>
                   </table>
                 
<!-- ENDIF -->

<!-- INCLUDE overall_footer.html -->
An dem Punkt {UPLOAD_SCRIPT} müsste jetzt wie gn#36 geschrieben hat das Upload Script ausgeführt werden.
Das Upload-Script besteht aber aus php und html gemischt, weswegen ich a) nicht weiß inwieweit das noch getrennt werden muss und b) wo ich das ganze dann über ob_start starten muss. Schreibe ich das in das PHP-Script (1.) oder in eine extra Datei?
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: mehrere Datein hintereinander includen

Beitrag von gn#36 »

(hier bin ich mir noch nicht sicher ob ich 'S_IN_GROUP' auch ein false zuweisen kann, oder ob der TRUE-Teil reicht)
Das geht auch viel einfacher:

Code: Alles auswählen

$template->assign_var('S_IN_GROUP', $is_in_group); 
Damit ersetzt du das ganze if // else Konstrukt (abgesehen von der Loginbox).

Wenn das alles ein extra Skript ist, dann kannst du den Aufruf einfach in deine PHP Datei mit einbauen:

Code: Alles auswählen

ob_start();
include "deine/extra/datei.php";
$template->assign_var('UPLOAD_SCRIPT', ob_get_contents());
ob_end_clean(); 
Bei Problemen mit globalen Variablen kannst du das ganze möglicherweise in eine Funktion verpacken, ansonsten kann das aber an nahezu beliebiger Stelle vor page_footer(); in deinem Skript stehen. Was die Sprachvariablen angeht: Du kannst so viele Dinge wie du willst in eine Datei schreiben. Je nach dem wie die Datei heißt wird sie automatisch eingebunden oder muss per $user->add_lang() zusätzlich als Datei eingebunden werden. Bringt dir aber natürlich nur dann was, wenn du sie auch benutzt, ich sehe in deiner Template Datei keinerlei Sprachvariablen der Variante {L_xxx} (die werden automatisch befüllt).
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
seatfriend
Mitglied
Beiträge: 45
Registriert: 26.05.2009 12:15
Wohnort: Erzgebirge

Re: mehrere Datein hintereinander includen

Beitrag von seatfriend »

Vielen Dank.

Ich habe nun alles so angepasst wie du mir geraten hast. Allerdings bekomme ich jetzt beim ausführen folgende Fehler auf einer weißen Seite:
Warning: include(./forum/common.php) [function.include]: failed to open stream: No such file or directory in E:\xampp\htdocs\forum\member_upload.php on line 21

Warning: include() [function.include]: Failed opening './forum/common.php' for inclusion (include_path='.;E:\xampp\php\PEAR') in E:\xampp\htdocs\forum\member_upload.php on line 21

Warning: include(./forum/includes/functions_display.php) [function.include]: failed to open stream: No such file or directory in E:\xampp\htdocs\forum\member_upload.php on line 24

Warning: include() [function.include]: Failed opening './forum/includes/functions_display.php' for inclusion (include_path='.;E:\xampp\php\PEAR') in E:\xampp\htdocs\forum\member_upload.php on line 24

Fatal error: Call to a member function session_begin() on a non-object in E:\xampp\htdocs\forum\member_upload.php on line 27
Woran könnte das denn liegen?

Ist damit:

Code: Alles auswählen

/ Specify the path to you phpBB3 installation directory.
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './forum/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
// The common.php file is required.
include($phpbb_root_path . 'common.' . $phpEx);

// since we are grabbing the user avatar, the function is inside the functions_display.php file since RC7
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
nicht der forenpfad angesteuert?


Woran könnte der letzte Fehler (Fatal Error) liegen?

EDIT:

Meine PHP:

Code: Alles auswählen

<?php
/**
*
* @author Leon.C-SM194 admin@seatfriends-bautzen.de - http://www.seatfriends-bautzen.de
*
* @package {memberupload}
* @version 1.0
* @copyright (c) 2010 Seatfriends-Bautzen
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
define('IN_PHPBB', true);
// Specify the path to you phpBB3 installation directory.
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './forum/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
// The common.php file is required.
include($phpbb_root_path . 'common.' . $phpEx);

// since we are grabbing the user avatar, the function is inside the functions_display.php file since RC7
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);

// Session auslesen und Benutzer-Informationen laden
$user->session_begin();  // Session auslesen
$auth->acl($user->data); // Benutzer-Informationen laden

// Sprachvariablen aus eigener Sprach Datei laden
$user->setup('mods/member_upload_lang'); // Sprachvariablen aus eigener Sprach Datei laden

//Funktion Gruppenzugehörigkeit laden
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);

$gruppen_id = 7;  // zu überprüfende Gruppen ID (Gruppen ID 7 = Mitglieder  )
$benutzer_id = $user->data['user_id']; // zu überprüfender User (Der User, der diese Seite aufgerufen hat )
$is_in_group = group_memberships($gruppen_id, $benutzer_id , true);  // Nun erfolgt die eigentliche Prüfung:

//Programmierung--------------------------------------------------------------------

if ($user->data['user_id'] == ANONYMOUS)
{
        login_box();
}

else

$template->assign_var('S_IN_GROUP', $is_in_group);

ob_start();
include 'upload.php';
$template->assign_var('UPLOAD_SCRIPT', ob_get_contents());
ob_end_clean();

//Programmierung Ende--------------------------------------------------------------------


// Seiten Titel, diese Sprach Variable sollte in der Sprach Datei,
// welche weiter oben genannt wurde, definiert sein.
page_header($user->lang['MEIN_TITEL']);


// Das ist der Name der Template-Datei in /styles/<style>/templates/.
$template->set_filenames(array(
    'body' => 'member_upload_templ.html',
));

// Komplettierung des Scriptes und Ausgabe
page_footer();

?>
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: mehrere Datein hintereinander includen

Beitrag von gn#36 »

Kommt darauf an wo deine Datei liegt. Die Pfadangabe des $phpbb_root_path scheint falsch zu sein. Du musst den Root Pfad relativ zur Datei angeben, d.h. wenn die Datei im Foren Root liegt gehört da './' rein.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
seatfriend
Mitglied
Beiträge: 45
Registriert: 26.05.2009 12:15
Wohnort: Erzgebirge

Re: mehrere Datein hintereinander includen

Beitrag von seatfriend »

Okay, das war Fehler 1,
Fehler 2 mit dem ENDIF habe ich selber gefunden.

Allerdings bekomme ich nie eine Seite angezeigt....Es kommt nur ne weiße Seite.
An was könnte denn das liegen? Sollte ja die php sein...
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: mehrere Datein hintereinander includen

Beitrag von gn#36 »

Kann auch ein Fehler in der Template Datei sein. Hast du mal die Debug Konstanten in der config.php eingeschaltet? (define('DEBUG', true); define('DEBUG_EXTRA', true); )?
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
seatfriend
Mitglied
Beiträge: 45
Registriert: 26.05.2009 12:15
Wohnort: Erzgebirge

Re: mehrere Datein hintereinander includen

Beitrag von seatfriend »

Danke für den hilfreichen Tip,

dadurch konnte ich feststellen das in der Language-Datei ein Simikolon statt eines Kommas war. Der Upload klappt jetzt wunderbar.

Wenn ich das ganze noch verfeinert habe und weiß wie man solche MOD-Installs erstellt würde ich das ganze auch als Mod zur verfügung stellen...
Antworten

Zurück zu „Coding & Technik“