Kalender im Posting als Erweiterung

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.
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 7858
Registriert: 24.05.2010 08:31
Kontaktdaten:

Kalender im Posting als Erweiterung

Beitrag von Kirk »

Hallo
Anhand dieses Beitrags habe ich versucht eine EXT daraus zu machen.
Die html und css Einträge sind kein Problem, nur eines bereitet mir Schwierigkeiten, beim manuellen Einbau muss man in der root/viewtopic.php vor:

Code: Alles auswählen

'POST_DATE'         => $user->format_date($row['post_time'], false, ($view == 'print') ? true : false), 
das hier einfügen:

Code: Alles auswählen

        'MONTH_YEAR'        => $user->format_date($row['post_time'], 'M Y', false),
        'DATE'              => $user->format_date($row['post_time'], 'd', false), 
dieses habe ich versucht in die listner.php einzutragen, doch leider wird mir dieser Fehler angezeigt:
Fatal error: Call to a member function format_date() on a non-object in /users/kirk2/www/phpBB3/ext/kirk/calendarinposting/event/listener.php on line 56
Hier mal meine ./event/listner.php

Code: Alles auswählen

<?php
/**
*
* @package phpBB Extension - Kirk calendarinposting
* @copyright (c) 2014 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/

namespace kirk\calendarinposting\event;

/**
* @ignore
*/
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
* Event listener
*/
class listener implements EventSubscriberInterface
{
    static public function getSubscribedEvents()
    {
        return array(
            'core.viewtopic_modify_post_action_conditions'  => 'add_calendar',
        );
    }

    /* @var \phpbb\controller\helper */
    protected $helper;

    /* @var \phpbb\db\driver\driver_interface */
    protected $db;

    /* @var \phpbb\template\template */
    protected $template;

    /* @var \phpbb\user */
    protected $user;

    /* @var string phpEx */
    protected $php_ext;

    /**
    * Constructor
    *
    * @param \phpbb\controller\helper    $helper        Controller helper object
    * @param \phpbb\db\driver\driver_interface $db    Database object
    * @param \phpbb\template            $template    Template object
    * @param string                        $php_ext    phpEx
    */

    public function add_calendar($event)
    {
    $post_row = array(
                'MONTH_YEAR'        => $this->user->format_date($row['post_time'], 'M Y', false),
                'DATE'              => $this->user->format_date($row['post_time'], 'd', false),
                );
    }
} 
Ich komme trotz intensiver Suche nach Fatal error: Call to a member function format_date() on a non-object nicht dahinter was da verkehrt ist.
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Re: Kalender im Posting als Erweiterung

Beitrag von nickvergessen »

Der Konstruktor ala public function __construct() fehlt?
kein Support per PN
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: Kalender im Posting als Erweiterung

Beitrag von D@ve »

Dein Listener kennt das $user-Objekt nicht. Das musst Du ihm erst übergeben - wie nv schon sagte über den Konstruktor:

Code: Alles auswählen

class listener implements EventSubscriberInterface
{
private $user_OBJ = null;

public function __construct(\phpbb\user $user_OBJ)
{
    $this->user_OBJ = $user_OBJ;
}
.
.
. 
In Deiner services.yml musst Du entsprechend auch @user als "argument" übergeben.

Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 7858
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Kalender im Posting als Erweiterung

Beitrag von Kirk »

Danke euch beiden, ich habe in der listner.php das hier eingetragen:

Code: Alles auswählen

<?php
/**
*
* @package phpBB Extension - Kirk calendarinposting
* @copyright (c) 2014 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/

namespace kirk\calendarinposting\event;

/**
* @ignore
*/
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
* Event listener
*/
class listener implements EventSubscriberInterface
{
private $user_OBJ = null;

    static public function getSubscribedEvents()
    {
        return array(
            'core.viewtopic_modify_post_action_conditions'  => 'add_calendar',
        );
    }

    /* @var \phpbb\controller\helper */
    protected $helper;

    /* @var \phpbb\db\driver\driver_interface */
    protected $db;

    /* @var \phpbb\template\template */
    protected $template;

    /* @var \phpbb\user */
    protected $user;

    /* @var string phpEx */
    protected $php_ext;

    /**
    * Constructor
    *
    * @param \phpbb\controller\helper    $helper        Controller helper object
    * @param \phpbb\db\driver\driver_interface $db    Database object
    * @param \phpbb\template            $template    Template object
    * @param string                        $php_ext    phpEx
    */

public function __construct(\phpbb\user $user)
{
    $this->user_OBJ = $user_OBJ;
}

    public function add_calendar($event)
    {
    $post_row = array(
                'MONTH_YEAR'        => $this->user->format_date($row['post_time'], 'M Y', false),
                'DATE'              => $this->user->format_date($row['post_time'], 'd', false),
                );
    }
} 
In der services.yml das hier:

Code: Alles auswählen

services:
    kirk.calendarinposting.listener:
        class: kirk\calendarinposting\event\listener
        arguments:
            - @template
            - @user
        tags:
            - { name: event.listener } 
Jetzt wird mir folgender Fehler angezeigt:
Catchable fatal error: Argument 1 passed to kirk\calendarinposting\event\listener::__construct() must be an instance of phpbb\user, instance of phpbb\template\twig\twig given, called in /users/kirk2/www/phpBB3/cache/container_dotslash.php on line 2088 and defined in /users/kirk2/www/phpBB3/ext/kirk/calendarinposting/event/listener.php on line 55
Sorry aber php ist nicht mein Fall.
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: Kalender im Posting als Erweiterung

Beitrag von D@ve »

Du musst die Erweiterung deinstallieren und neu installieren.

Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
Elsensee
Ehemaliges Teammitglied
Beiträge: 832
Registriert: 19.05.2010 15:14
Wohnort: Hamburg
Kontaktdaten:

Re: Kalender im Posting als Erweiterung

Beitrag von Elsensee »

Entferne die Zeile mit - @template aus der services.yml. Die will er übergeben, aber das willst du im Konstruktor nicht. :wink: Also entfernen sollte das Problem beheben. Eventuell dann noch den Cache löschen.
Posts mostly powered by GitHub and phpBB.de Cross-Reference

2015-03-20 - Never forget 8)
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 7858
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Kalender im Posting als Erweiterung

Beitrag von Kirk »

@Dave
Ich hatte die Erweiterung deaktiviert.
@Elsensee
Dieses habe ich entfernt, den Cache geleert.
Nun hatte ich folgende Fehlermeldung: [phpBB Debug] PHP Notice: in file [ROOT]/ext/kirk/calendarinposting/event/listener.php on line 57: Undefined variable: user_OBJ
Als oha be ich in der listner.php das hier:

Code: Alles auswählen

public function __construct(\phpbb\user $user) 
durch das ersetzt:

Code: Alles auswählen

public function __construct(\phpbb\user $user_OBJ) 

Ext deaktiviert und komplett gelöscht, Cache geleert, EXT aktiviert, jetzt bekomme ich den selben Fehler wie im 1. Beitrag.
Fatal error: Call to a member function format_date() on a non-object in /users/kirk2/www/phpBB3/ext/kirk/calendarinposting/event/listener.php on line 63
Hier noch mal die listner.php

Code: Alles auswählen

<?php
/**
*
* @package phpBB Extension - Kirk calendarinposting
* @copyright (c) 2014 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/

namespace kirk\calendarinposting\event;

/**
* @ignore
*/
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
* Event listener
*/
class listener implements EventSubscriberInterface
{
private $user_OBJ = null;

    static public function getSubscribedEvents()
    {
        return array(
            'core.viewtopic_modify_post_action_conditions'  => 'add_calendar',
        );
    }

    /* @var \phpbb\controller\helper */
    protected $helper;

    /* @var \phpbb\db\driver\driver_interface */
    protected $db;

    /* @var \phpbb\template\template */
    protected $template;

    /* @var \phpbb\user */
    protected $user;

    /* @var string phpEx */
    protected $php_ext;

    /**
    * Constructor
    *
    * @param \phpbb\controller\helper    $helper        Controller helper object
    * @param \phpbb\db\driver\driver_interface $db    Database object
    * @param \phpbb\template            $template    Template object
    * @param string                        $php_ext    phpEx
    */

public function __construct(\phpbb\user $user_OBJ)
{
    $this->user_OBJ = $user_OBJ;
}

    public function add_calendar($event)
    {
    $post_row = array(
                'MONTH_YEAR'        => $this->user->format_date($row['post_time'], 'M Y', false),
                'DATE'              => $this->user->format_date($row['post_time'], 'd', false),
                );
    }
} 
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: Kalender im Posting als Erweiterung

Beitrag von D@ve »

Du hast hier zum Teil meinen Code kopiert und zum Teil Deinen gelassern.
In Großbuchstaben noch den Typ an die Variable anzuhängen ($user_OBJ, $forum_id_INT etc) ist "Dave-Konvention" ;) :D

Wenn Du das übernimmst, musst Du das schon überall machen, also das Objekt dann überall so ansprechen:

Also nicht

Code: Alles auswählen

    $post_row = array(
                'MONTH_YEAR'        => $this->user->format_date($row['post_time'], 'M Y', false),
                'DATE'              => $this->user->format_date($row['post_time'], 'd', false),
                );
Sondern:

Code: Alles auswählen

    $post_row = array(
                'MONTH_YEAR'        => $this->user_OBJ->format_date($row['post_time'], 'M Y', false),
                'DATE'              => $this->user_OBJ->format_date($row['post_time'], 'd', false),
                );
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 7858
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Kalender im Posting als Erweiterung

Beitrag von Kirk »

Wenn ich es so einsetze bekomme ich diese Fehlermeldung:
phpBB Debug] PHP Notice: in file [ROOT]/ext/kirk/calendarinposting/event/listener.php on line 63: Undefined variable: row

Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct() [<a href='http://de.php.net/datetime.construct'>d ... nstruct</a>]: Failed to parse time string (@) at position 0 (@): Unexpected character' in /users/kirk2/www/phpBB3/phpbb/datetime.php:50 Stack trace: #0 /users/kirk2/www/phpBB3/phpbb/datetime.php(50): DateTime->__construct('@', Object(DateTimeZone)) #1 /users/kirk2/www/phpBB3/phpbb/user.php(720): phpbb\datetime->__construct(Object(phpbb\user), '@', Object(DateTimeZone)) #2 /users/kirk2/www/phpBB3/ext/kirk/calendarinposting/event/listener.php(63): phpbb\user->format_date(NULL, 'M Y', false) #3 [internal function]: kirk\calendarinposting\event\listener->add_calendar(Object(phpbb\event\data)) #4 /users/kirk2/www/phpBB3/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcher.php(164): call_user_func(Array, Object(phpbb\event\data)) #5 /users/kirk2/www/phpBB3/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcher.php(53): Symfony\Component\EventDispatcher\EventDispatcher->doDispatch(Array, 'core.viewtopic_...', Object(phpbb\event\data)) #6 /users/kirk2/www/phpBB3/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/ContainerAwareEventDispatcher.php(167): Symfony\Component\EventDispatcher\EventDispatcher->dispatch('core.viewtopic_...', Object(phpbb\event\data)) #7 /users/kirk2/www/phpBB3/phpbb/event/dispatcher.php(40): Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch('core.viewtopic_...', Object(phpbb\event\data)) #8 /users/kirk2/www/phpBB3/viewtopic.php(1728): phpbb\event\dispatcher->trigger_event('core.viewtopic_...', Array) #9 {main} thrown in /users/kirk2/www/phpBB3/phpbb/datetime.php on line 50
Edit:
Habe das noch hinzugefügt:

Code: Alles auswählen

         $row = $event['row'], 
Jetzte wird mir der Kalender angezeigt aber ohne Inhalt.
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Re: Kalender im Posting als Erweiterung

Beitrag von D@ve »

Schau Dir mal Deine add_calendar() an. Die erzeugt zwar ein Array mit Template-Variablen, macht damit aber nix... ;)
Entweder musst Du das selber per ...assign_var() rendern oder wieder an dein event-Objekt zurückgeben.

Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
Antworten

Zurück zu „Extension Bastelstube“