[3.2] Neue Seitein 3 Schritten - Frage

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Maggan22
Mitglied
Beiträge: 392
Registriert: 24.01.2008 11:29
Kontaktdaten:

[3.2] Neue Seitein 3 Schritten - Frage

Beitrag von Maggan22 »

Hallöchen zusammen,

ich hoffe das ist der richtige Bereich dafür.

ich habe nach folgender Anleitung:
https://wiki.phpbb.com/Deutsch:Vorlage_ ... _PHP_Datei

eine neue Seite erstellt.
Ich möchte einen neuen Block und eigenen Inhalt erstellen.

Soweit sogut - neben "Beispiel & "Demo" habe ich nun "eigener Test" reingesezt.

Ich bekomme aber weder unter Beispiel & Demo neuen Inhalt noch in meine neue Reihe "Eigener Test"

Folgendes hab ich eingegeben:

neueseite.php:

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/meine_sprach_datei'); // Sprachvariablen aus eigener Sprach Datei laden

/*
* Nun folgt erst Dein PHP Code für die neue Seite, also:
* Variablen setzen, Datenbankabfragen, Einfügen und Entfernen von Einträgen usw...
*
* Dies ist nun ein sehr primitives Beispiel.
* Es soll nur veranschaulichen wie es funktioniert.
*
*/
$example_variable = sprintf($user->lang['TIME_NOW'], $user->format_date(time()));
$google_logo = '<a href="http://www.google.com/"><img src="http://www.google.com/intl/en_ALL/images/logo.gif" alt="Google" /></a>';

// Ein typischer Gebrauch um Variablen an das Template zu senden.
$template->assign_vars(array(
    'EXAMPLE_VAR'    => $example_variable,
    'GOOGLE_LOGO'    => $google_logo,
    'MY_AVATAR'        => get_user_avatar($user->data['user_avatar'], $user->data['user_avatar_type'], $user->data['user_avatar_width'], $user->data['user_avatar_height']),
    'EIGENER_VAR'       => $eigener_variable,
));

/*
 * Nun weisen wir ein paar statische Daten einem Array zu.
 * Alle Sprachvariablen werden normalerweise in der Sprach Datei zugewiesen,
 * dies dient hier nur zur DEMONSTRATION.
 */
$some_array = array(
    array(
        'beispiel'        => 'Nur ein Beispiel 1',
        'demonstration'    => 'Etwas zum zeigen',
        'eigener'          => 'und hier ein eigener Test'
    ),
    array(
        'beispiel'        => 'Nur ein Beispiel 1',
        'demonstration'    => 'schon wieder etwas zum zeigen',
        'eigener' => 'nochmal ein eigener Test'
    ),

);

/*
 * Standard Beispiel um eine Block Variable fuer das Template zu fuellen.
 * Dies wird Dir ermöglichen einen Block oder ein Array im Template darzustellen
 * Dies ist nützlich um SQL Abfragen aus der Datenbank in das Template zu überführen.
 */
foreach ($some_array as $row)
{
    $template->assign_block_vars('block_name', array(
        'EXAMPLE'        => $row['beispiel'],
        'DEMO'            => $row['demonstration'],
        'EIGENER'            => $row['eigener'],
    ));
}

// Seiten Titel, diese Sprach Variable sollte in der Sprach Datei,
// welche weiter oben genannt wurde, definiert sein.
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' => 'mein_template.html',
));

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

?>
meine_sprach_datei.php:

Code: Alles auswählen

<?php
/**
*
* groups [German]
*
* @author Mein Benutzername email@domain.de - http://meine-seite.de
*
* @package language
* @version $Id$
* @copyright (c) 2007 Deine Gruppe
* @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();
}

// DEVELOPERS PLEASE NOTE
//
// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
//
// Placeholders can now contain order information, e.g. instead of
// 'Page %s of %s' you can (and should) write 'Page %1$s of %2$s', this allows
// translators to re-order the output of data while ensuring it remains correct
//
// You do not need this where single placeholders are used, e.g. 'Message %d' is fine
// equally where a string contains only two placeholders which are used to wrap text
// in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine

$lang = array_merge($lang, array(
    'EXAMPLE'        => 'Beispiel',
    'DEMO'            => 'Demo',
    'EIGENER'            => 'Eigener Test',
    'TIME_NOW'        => 'Die aktuelle Zeit lautet %s',
    'MEIN_TITEL'    => 'Meine neuer Seiten Titel',
));

?>
mein_template.html:

Code: Alles auswählen

                  <!-- INCLUDE overall_header.html -->

<div>{MY_AVATAR}</div>
<div>{EXAMPLE_VAR}</div>
<div>{GOOGLE_LOGO}</div>
<div>{EIGENER_VAR}</div>

<table class="table1" cellspacing="1">
    <tr>
        <th>{L_EXAMPLE}</th>
        <th>{L_DEMO}</th>
        <th>{L_EIGENER}</th>
    </tr>
    <!-- BEGIN block_name -->
    <tr class="<!-- IF block_name.S_ROW_COUNT is even -->bg1<!-- ELSE -->bg2<!-- ENDIF -->">
        <td>{block_name.EXAMPLE}</td>
        <td>{block_name.DEMO}</td>
        <td>{block_name.EIGENER}</td>
    </tr>
    <!-- END block_name -->
</table>

<!-- INCLUDE overall_footer.html -->
Was habe ich falsch gemacht, wo muss ich noch etwas ergänzen?

Ich bedanke mich schoneinmal für die Hilfe


_____________________________________________
EDIT:
man sollte auch den Cache leeren - dann klappt es auch mit der Anzeige!

Trotzdem 2 Fragen:
1. ich bekomme jetzt eine Fehlermeldung im Header:

Code: Alles auswählen

[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4596: Cannot modify header information - headers already sent by (output started at [ROOT]/language/de/mods/meine_sprach_datei.php:1)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4596: Cannot modify header information - headers already sent by (output started at [ROOT]/language/de/mods/meine_sprach_datei.php:1)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4596: Cannot modify header information - headers already sent by (output started at [ROOT]/language/de/mods/meine_sprach_datei.php:1)
Wie werd ich die wieder los auf der Seite.

2. Ich möchte gern den Inhalt von eigenen Profilfeldern anzeigen lassen und somit eine Liste erstellen. Könnte mir jemand helfen wie ich das berwerkstelige?
Gruss Maggan22
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 7908
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: [3.2] Neue Seitein 3 Schritten - Frage

Beitrag von Kirk »

Hallo
Zur deiner Fehlermeldung: Was bedeutet 'headers already sent'?
Der von dir verlinkte Artikel ist eher für 3.0 gedacht, am besten du erstellst dir eine Extension.
Maggan22
Mitglied
Beiträge: 392
Registriert: 24.01.2008 11:29
Kontaktdaten:

Re: [3.2] Neue Seitein 3 Schritten - Frage

Beitrag von Maggan22 »

Dankeschön für die Info und den Link.
Mal schauen ob ich das hinbekomme. Werd da bestimmt noch ein oder zweimal fragen.
Gruss Maggan22
Maggan22
Mitglied
Beiträge: 392
Registriert: 24.01.2008 11:29
Kontaktdaten:

Re: [3.2] Neue Seitein 3 Schritten - Frage

Beitrag von Maggan22 »

So, ich hab mich mal drangewagt.
Soweit ist es wohl ok.
Ganz schlussendlich belkomme ich aber eine Fehlermeldung:

Code: Alles auswählen

Fehler: The file "/www/htdocs/w009ae80/vollzeiteltern/ext/maggan22/infozeile/config/services.yml" does not contain valid YAML.

#0 /www/htdocs/w009ae80/vollzeiteltern/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php(44): Symfony\Component\DependencyInjection\Loader\YamlFileLoader->loadFile('/www/htdocs/w00...')
#1 /www/htdocs/w009ae80/vollzeiteltern/phpbb/extension/di/extension_base.php(99): Symfony\Component\DependencyInjection\Loader\YamlFileLoader->load('services.yml')
#2 /www/htdocs/w009ae80/vollzeiteltern/phpbb/extension/di/extension_base.php(63): phpbb\extension\di\extension_base->load_services(Object(Symfony\Component\DependencyInjection\ContainerBuilder))
#3 /www/htdocs/w009ae80/vollzeiteltern/vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php(59): phpbb\extension\di\extension_base->load(Array, Object(Symfony\Component\DependencyInjection\ContainerBuilder))
#4 /www/htdocs/w009ae80/vollzeiteltern/vendor/symfony/http-kernel/DependencyInjection/MergeExtensionConfigurationPass.php(39): Symfony\Component\DependencyInjection\Compiler\MergeExtensionConfigurationPass->process(Object(Symfony\Component\DependencyInjection\ContainerBuilder))
#5 /www/htdocs/w009ae80/vollzeiteltern/vendor/symfony/dependency-injection/Compiler/Compiler.php(102): Symfony\Component\HttpKernel\DependencyInjection\MergeExtensionConfigurationPass->process(Object(Symfony\Component\DependencyInjection\ContainerBuilder))
#6 /www/htdocs/w009ae80/vollzeiteltern/vendor/symfony/dependency-injection/ContainerBuilder.php(587): Symfony\Component\DependencyInjection\Compiler\Compiler->compile(Object(Symfony\Component\DependencyInjection\ContainerBuilder))
#7 /www/htdocs/w009ae80/vollzeiteltern/phpbb/di/container_builder.php(198): Symfony\Component\DependencyInjection\ContainerBuilder->compile()
#8 /www/htdocs/w009ae80/vollzeiteltern/common.php(115): phpbb\di\container_builder->get_container()
#9 /www/htdocs/w009ae80/vollzeiteltern/adm/index.php(23): require('/www/htdocs/w00...')
#10 {main}
Der Inhalt der services.yml ist:

Code: Alles auswählen

maggan22.infozeile.controller.routenhandler:
    # Hier muss sich der Pfad der Klassendatei wiederspiegeln
    # in diesem Fall liegt die Klasse also in einer Datei mit dem Namen routenhandler.php im Ordner ext\gn36\infobar\controller\
    class: maggan22\infozeile\controller\routenhandler
    # Parameter, die der Klasse im Konstruktor übergeben werden sollen. Wenn man z.B. das Template braucht kann man es hier anfordern
    # Hilfreich ist auch oft die Controller Helfer Klasse
    # Passend dazu braucht man aber auch eine Methode '__construct(\phpbb\template\template $template, \phpbb\controller\helper $helper) in der man das Template in eine globale Variable speichert.
    arguments:
        - '@template'
        - '@controller.helper'
hab es auch schon mit:

Code: Alles auswählen

maggan22.infozeile.controller.routenhandler:
    class: maggan22\infozeile\controller\routenhandler
    arguments:
        - '@template'
        - '@controller.helper'
versucht.

Angelegt habe ich im Ordner ext folgende Ordner mit folgendem Inhalt:
maggan22/infozeile/composer.json

maggan22/infozeile/config/routing.yml
maggan22/infozeile/config/services.yml

maggan22/infozeile/controller/routenhandler.php

maggan22/infozeile/styles/prosilver/template/event/overall_header_content_before.html
maggan22/infozeile/styles/prosilver/template/event/overall_header_navigation_prepend.html

Das ist absolutes Neuland für mich - Entschuldigung wenn ich mich da etwas dusselig anstelle
Gruss Maggan22
Verschoben von Support-Forum nach Extension Bastelstube am 02.01.2020 20:34 durch Kirk

Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 7908
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: [3.2] Neue Seitein 3 Schritten - Frage

Beitrag von Kirk »

Wenn du du nur oben ein paar Zeilen haben möchtest, könntest eine von diesen Extensionen testen
Newsblock-Mini / Mini Blog
wenn diese dir nicht zusagen, dann beschreibe doch genau was du möchtest, dementsprechend kann man dir helfen. :)
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: [3.2] Neue Seitein 3 Schritten - Frage

Beitrag von BNa »

Code: Alles auswählen

Fehler: The file "/www/htdocs/w009ae80/vollzeiteltern/ext/maggan22/infozeile/config/services.yml" does not contain valid YAML.
Von hier an lesen:
https://www.phpbb.com/community/viewtop ... #p15032396

Häufigster Grund: Unerlaubte Tabulator-Einrückung oder Leerstelle an einer Position, "wo es nicht erlaubt ist".

Tip: Einen Yaml Format-Checker benutzen, z.B.:
http://www.yamllint.com/
https://codebeautify.org/yaml-validator
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17411
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: [3.2] Neue Seitein 3 Schritten - Frage

Beitrag von Dr.Death »

YAML mag keine TABULATOREN, nur LEERZEICHEN ;-) (Erste Einrückung sind meistens zwei Leerzeichen)

YAML fängt auch immer mit 3 - an --> ---

Code: Alles auswählen

--- 
maggan22.infozeile.controller.routenhandler: 
  arguments: 
    - "@template"
    - "@controller.helper"
  class: maggan22\infozeile\controller\routenhandler
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: [3.2] Neue Seitein 3 Schritten - Frage

Beitrag von BNa »

Cool, wieder was gelernt. Sagte ja nicht umsonst "Lehr"Stelle :roll:
Maggan22
Mitglied
Beiträge: 392
Registriert: 24.01.2008 11:29
Kontaktdaten:

Re: [3.2] Neue Seitein 3 Schritten - Frage

Beitrag von Maggan22 »

Danke euch vielmals :)
Also was ich möchte - EIGENTLICH wollte ich den Inhalt von Profilfeldern auf einer eigenständigen Seite anzeigen lassen.
Also quasi eine Liste erstellen. Über google kam ich dann auf den Link im ersten Beitrag.
Funktionierte ganz gut, bis eben auf die Fehlermeldung.
Dann wollte ich wissen wie ich es nun so umstricken muss damit ich Profilfeldangaben da anzeigen lassen kann. Und bekam dann ja von Kirk den Hinweis das die von mir verlinkte Anleitung eigentlich für das phpBB3.0 ist und ich vielleicht besser eine Extention erstellen soll.
Hab ich noch nie gemacht, aber gut, hab ich mich dran gewagt. Nun weiß ich schonmal wie es theoretisch ohne Fehlermeldung klappen müsste (muss ich noch testen - hab jetzt erst wieder Zeit gefunden hier reinzuschauen).
Wenn das dann funktioniert würde ich damit dann gerne eine Liste erstellen wo die Profilfeldinfos angezeigt werden. Mit welchem System ist mir eigentlich egal.
Mit dem von mir verlinkten komme ich schneller klar, damit kenne ich mich noch so halbwegs aus - mit dem hier, habe ich vermutlich viel mehr möglichkeiten, aber da muss ich mich dann erst reinfuddeln - und entsprechend mehr Fragen :)

Automatisch dem Beitrag hinzugefügt nach 13 Minuten 12 Sekunden. Bitte Regel für „Topic-Bumping“ beachten. Danke.

So,

ich hab es mal so gemacht wie es hier stand, kam aber wieder eine Fehlermeldung nach dem aktivieren.

Code: Alles auswählen

Fehler: There is no extension able to load the configuration for "maggan22.infozeile.controller.routenhandler" (in /www/htdocs/w009ae80/vollzeiteltern/ext/maggan22/infozeile/config/services.yml). Looked for namespace "maggan22.infozeile.controller.routenhandler", found none

#0 /www/htdocs/w009ae80/vollzeiteltern/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php(369): Symfony\Component\DependencyInjection\Loader\YamlFileLoader->validate(Array, '/www/htdocs/w00...')
#1 /www/htdocs/w009ae80/vollzeiteltern/vendor/symfony/dependency-injection/Loader/YamlFileLoader.php(44): Symfony\Component\DependencyInjection\Loader\YamlFileLoader->loadFile('/www/htdocs/w00...')
#2 /www/htdocs/w009ae80/vollzeiteltern/phpbb/extension/di/extension_base.php(99): Symfony\Component\DependencyInjection\Loader\YamlFileLoader->load('services.yml')
#3 /www/htdocs/w009ae80/vollzeiteltern/phpbb/extension/di/extension_base.php(63): phpbb\extension\di\extension_base->load_services(Object(Symfony\Component\DependencyInjection\ContainerBuilder))
#4 /www/htdocs/w009ae80/vollzeiteltern/vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php(59): phpbb\extension\di\extension_base->load(Array, Object(Symfony\Component\DependencyInjection\ContainerBuilder))
#5 /www/htdocs/w009ae80/vollzeiteltern/vendor/symfony/http-kernel/DependencyInjection/MergeExtensionConfigurationPass.php(39): Symfony\Component\DependencyInjection\Compiler\MergeExtensionConfigurationPass->process(Object(Symfony\Component\DependencyInjection\ContainerBuilder))
#6 /www/htdocs/w009ae80/vollzeiteltern/vendor/symfony/dependency-injection/Compiler/Compiler.php(102): Symfony\Component\HttpKernel\DependencyInjection\MergeExtensionConfigurationPass->process(Object(Symfony\Component\DependencyInjection\ContainerBuilder))
#7 /www/htdocs/w009ae80/vollzeiteltern/vendor/symfony/dependency-injection/ContainerBuilder.php(587): Symfony\Component\DependencyInjection\Compiler\Compiler->compile(Object(Symfony\Component\DependencyInjection\ContainerBuilder))
#8 /www/htdocs/w009ae80/vollzeiteltern/phpbb/di/container_builder.php(198): Symfony\Component\DependencyInjection\ContainerBuilder->compile()
#9 /www/htdocs/w009ae80/vollzeiteltern/common.php(115): phpbb\di\container_builder->get_container()
#10 /www/htdocs/w009ae80/vollzeiteltern/adm/index.php(23): require('/www/htdocs/w00...')
#11 {main}
Gruss Maggan22
Antworten

Zurück zu „Extension Bastelstube“