Seite 1 von 2
Kalender im Posting als Erweiterung
Verfasst: 11.01.2015 17:53
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.
Re: Kalender im Posting als Erweiterung
Verfasst: 11.01.2015 19:25
von nickvergessen
Der Konstruktor ala public function __construct()
fehlt?
Re: Kalender im Posting als Erweiterung
Verfasst: 11.01.2015 19:35
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
Re: Kalender im Posting als Erweiterung
Verfasst: 11.01.2015 20:09
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.
Re: Kalender im Posting als Erweiterung
Verfasst: 11.01.2015 20:37
von D@ve
Du musst die Erweiterung deinstallieren und neu installieren.
Gruß, Dave
Re: Kalender im Posting als Erweiterung
Verfasst: 12.01.2015 00:10
von Elsensee
Entferne die Zeile mit
- @template
aus der services.yml. Die will er übergeben, aber das willst du im Konstruktor nicht.

Also entfernen sollte das Problem beheben. Eventuell dann noch den Cache löschen.
Re: Kalender im Posting als Erweiterung
Verfasst: 12.01.2015 18:47
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:
durch das ersetzt:
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),
);
}
}
Re: Kalender im Posting als Erweiterung
Verfasst: 12.01.2015 18:54
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"
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),
);
Re: Kalender im Posting als Erweiterung
Verfasst: 12.01.2015 18:59
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:
Jetzte wird mir der Kalender angezeigt aber ohne Inhalt.
Re: Kalender im Posting als Erweiterung
Verfasst: 13.01.2015 11:22
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