Seite 1 von 1

Eigene Funktion ins Template übergeben

Verfasst: 10.02.2010 10:10
von bene0222
Hallo Forum,

ich bin gerade dabei, mit der Vorlage eine eigene Partner-Seite einzufügen. Auf der Seite sollen vorhandene Banner erscheinen, die ich ja simpel über die Template-Datei und HTML einbinden kann, sowie ein Formular, mit dem man Interesse bekunden kann. Nur wie bekomme ich meinen PHP-Code dort rein?

Ich habs mit

Code: Alles auswählen

include('partnerform.php');
$partnerform = partnerform();
in der Seite, die aufgerufen wird und

Code: Alles auswählen

<!-- INCLUDE overall_header.html -->
<p>Text und so weiter</p>
<div>{PARTNERFORM}</div>
<!-- INCLUDE overall_footer.html -->
im Template versucht, doch das Formular wird schon vor dem Header eingebunden. Der Marker im Template hat auch gar keine Auswirkung auf die Ausgabe, denn sobald ich eine Funktion in eine Variable auf der einzubindenden Seite schreibe, wird diese ausgegeben.

Am liebsten wäre es mir ja, wenn ich es per include() einfach dort einbinden könnte, wo ich es haben möchte.
Ein Iframe kommt leider nicht in Frage.

Notfalls muss ich es als Popup-Link einbinden. Das wäre aber das erste auf der Seite und fände ich auch nicht gerade schön.

Ich hoffe, mir kann da jemand helfen. :)

Schönen Gruß
b.

Re: Eigene Funktion ins Template übergeben

Verfasst: 10.02.2010 20:21
von Pyramide
  1. Du änderst den Code in der partnerform.php so, dass das Formular nicht sofort per echo ausgegeben, sondern einer Variable zugewiesen wird
  2. Du fügst den generierten HTML-Code direkt ins Template ein
  3. Wenn alle Stricke reißen: Aktivier im ACP die Option "PHP in Templates erlauben"
Meine Glaskugel flüstert mir aber gerade zu, dass möglicherweise ausschließlich die Option d) "kompletter Umbau der partnerform.php und integration ins phpBB Templatesystem" in Frage kommt - nämlich dann, wenn die partnerform.php nicht nur den HTML-Code generiert, sondern auch als <form action="..."> eingetragen ist. Mit Sicherheit sagen könne sie das aber erst, nachdem sie den Inhalt der partnerform.php gesehen habe.

Re: Eigene Funktion ins Template übergeben

Verfasst: 10.02.2010 21:21
von bene0222
Danke für deine Hilfe! :)
zu a) Das war eigentlich mein Ziel. Ich dachte, wenn ich in der partner.php (weiter unten) die Funktion in eine Variable schreibe und die Variable im Template ausgebe, würde es es so funktionieren.

zu b) Da ich ja noch ein paar Variablen via PHP ins HTML-form gebe, geht das leider nicht - oder ich bekomme es nicht hin

zu c) Es spräche ja eigentlich nichts dagegen, PHP in Templates zu aktivieren. Ich nehme aber mal an, dass es ein (weiteres) Sicherheitsrisiko ist? (Neben meinem 100%-XSS-sicheren Formular :roll: )

Hier nun die beiden relevanten Dateien. Das Template enthält derzeit nur ein wenig Text.

partner.php, die Seite, auf die in der Navigation verlinkt wird:

Code: Alles auswählen

<?php
/**
*
* @author Original Autor Benutzername autor_email@domain.de - http://meine-seite.de
* @author Anderer Autor Benutzername andere_email@domain.de - http://domain.de
*
* @package {PACKAGENAME}
* @version $Id$
* @copyright (c) 2007 Dein Gruppen Name
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
// Benötigte Dateien und Variablen von phpBB 
define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

// Da wir weiter unten noch einen Avatar anzeigen lassen wollen,
// benötigen wir noch die dazu passende Funktion 
// die in der Datein includes/functions_display.php vorhanden ist.
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
$user->setup('mods/partner'); // Sprachvariablen aus eigener Sprach Datei laden

require_once('partnerform.php');
$partnerform = partnerform();


page_header($user->lang['MEIN_TITEL']);

// Defniere nun den Dateinamen Deines Templates welches Du benutzen moechtest.
// Dies ist der Name von Deinem Template welches unter /styles/<style>/templates/ zu finden ist.
$template->set_filenames(array(
    'body' => 'partner.html',
));


// Script vervollständigen und Seite anzeigen lassen.
page_footer();

?>
Die partnerform.php ist ein normales Kontaktformular, abgekürzt und nur auf das Wichtigste beschränkt:

Code: Alles auswählen

<?php

function partnerform() {
// setze Variablen zum späteren Mailversand (Betreff, E-Mail-Adresse, etc.)
...

// hole POST-Daten und schreibe sie in Variablen
...
  
// validiere Daten
  
if(isset($_POST['submit'])) {
  if($name == '' || $homepage == '' || $bannerurl == ''){
    $errormsg .= $info['empty_fields'];
    $error = true;
  }
  if(!ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", $email)) {
    $errormsg .= $info['invalid_email'];
    $error = true;
  }
  
  if ($error != true) {
      $at_message = "Partneranfrage\n\nName: $name\n
      E-Mail: $email\n
      Homepage: $homepage\n
      URL zum Banner: $bannerurl\n
      Nachricht:\n$message\n\n
      Gesendet am $datum um $uhrzeit.";
      mail($at_mail, $at_subject, $at_message, $from_mail);
      echo $info['sent'];
    } else{
      echo $errormsg;
    }
  }
}
?>

<form name="partnerform" class="partnerform" action="<? echo $_SERVER['PHP_SELF']; ?>" method="post"> 
  <div>
    <label for="name">Name: *</label>
    <input name="name" type="text" id="name" value="<? echo $name; ?>" maxlength="30" />
  </div>
  <div>
    <label for="email">E-Mail-Adresse: *</label>
    <input name="email" type="text" id="email" value="<? echo $email; ?>" maxlength="30" />
  </div>
  <div>
    <label for="homepage">Homepage *:</label>
    <input name="homepage" type="text" id="homepage" value="<? echo $homepage; ?>" maxlength="100" />
  </div>
  <div>
    <label for="bannerurl">URL zum Banner *:</label>
    <input name="bannerurl" type="text" id="bannerurl" value="<? echo $bannerurl; ?>" maxlength="100" />
  </div>
  <div>
    <label for="message">Nachricht:</label>
    <textarea name="message" id="message"><? echo $message; ?></textarea>
  </div>
  <div><p>* Pflichtfelder</p></div>
  <div>
    <input type="hidden" name="honeypot" maxlength="20" />
    <input type="submit" value="Abschicken" class="submit button1" name="submit" />
    <input type="reset" class="submit button1" value="Zur&uuml;cksetzen" />
  </div>
</form>
<?php 
}
?>

Re: Eigene Funktion ins Template übergeben

Verfasst: 10.02.2010 22:05
von Pyramide
Du müsstest
  • Den PHP-Teil in deine ins Forum eingebundene .php Datei einfügen
  • Alle per echo ausgegebenen Daten per $template->set_var(s) ans Template übergeben
  • Den unteren Teil ins Template einfügen und die echo-Befehle durch {TEMPLATEVARIABLEN} ersetzen
Alternativ könntest du auch einen vorhanden Mod nutzen, z.B. [Beta] Contact Board Administration 0.1.4. Dort bekommst du dann z.B. auch ein Captcha sowie die Möglichkeit zum Versand als PM oder Beitrag kostenlos dazu. Du müsstest lediglich ein paar englische Texte übersetzen (die Banner kannst du ja auch dort dem Template hinzufügen).