< návrat zpět

Diskuse


Téma: Registrace extendu - náhrada systémové funkce rss

Zaslal/a 21.2.2017 9:35

golfinDobrý den, vytvářím extend pro funkci _formatTime($timestamp). Inspiroval jsem se zde na foru od pana Landsmana a upravil si kód pro svou potřebu. Pokud to nevadí. Když úpravu vložím přímo do souboru functions.php a původní funkci změním na upravenou, tak vše funguje výborně. Jenže, rád bych to vytvořil jako plugin (extend), abych při další aktualizaci SunLight nemusel upravovat originální soubory. Otázka, lze extendem tuto funkci nahradit? A pokud ano, jak ji zaregistruji? To se mi totiž moc nedaří, i když si pročítám Dokumentaci. Za případnou radu děkuji.

Ukázka skriptu:

<?php

/* ---- kontrola jadra ---- */

if (!defined('_core'))
{
die;
}

/* ---- funkce pluginu ---- */

/**
* Zformatovat timestamp na zaklade nastaveni systemu a převedení na slova
* @param number $timestamp UNIX timestamp
* @return string
*/
function _plugin_formatTime($timestamp)
{
// Dny a měsíce
$days = array("","V pondělí","V úterý","Ve středu","Ve čtvrtek","V pátek","V sobotu","V neděli");
$months = array("","ledna","února","března","dubna","května","června","července","srpna","září","října","listopadu","prosince");

// Datum a dnes
$date = date('Y-m-d', $timestamp);
$today = date('Y-m-d');

// Hodiny a minuty
$hourminute=date('H:i',$timestamp);
$minute=date('j',$timestamp);

// Včera
$startTime = mktime(0, 0, 0, date('m'), date('d')-1, date('Y'));
$endTime = mktime(23, 59, 59, date('m'), date('d')-1, date('Y'));

// Předevčírem a starší
$beforeyesterday=($days[date('N',$timestamp)].' '.date('j',$timestamp).'. '.$months[date('n',$timestamp)].' '.date('Y',$timestamp));

// Výstup
if($timestamp > $startTime and $timestamp < $endTime){

// Včera
$output="<span class='yesterday'>Včera v {$hourminute} hod.</span>";

}
else if ($date == $today) {

// Dnes
$output="<span class='today'>Dnes v {$hourminute} hod.</span>";

}else {

// Předevčírem a starší
$output="<span class='beforeyesterday'>{$beforeyesterday}</span>";

}

return $output;

}

/* ---- registrace pluginu ---- */

_extend('reg', 'ZDE nevím jak registrovat', '_plugin_formatTime');


PS: Zapoměl jsem říct, chci tím nahradit zobrazování datumu v celém systému, ne jen v článcích, nebo foru atd. Prostě globálně.

Zaslat odpověď >

#020629
Shira
Ve verzích 7.x není event pro přetížení _formatTime().
#020630
Jirka Daněk
Já jsem kdysi dělal něco podobného https://github.com/jDanek/TimeInterval/
Pouziti: TimeInterval::toString($timestamp);
Výstup je "před x sekundami" / "před rokem"
Dny nebo měsíce to ale bohužel nevypisuje...

Ale jak říká Shira, není tam event... jsou tedy 2 možnosti. Přidat si tam svůj (myslet na to při updatu), přemluvit Shiru aby ho tam dal oficiálně
Vlastní řešení by mohlo vypadat třeba takhle... (ale jsem proti neoficiálním úpravám)
/**
* Zformatovat timestamp na zaklade nastaveni systemu
*
* @param number $timestamp UNIX timestamp
* @return string
*/
function _formatTime($timestamp)
{
$extend = _extend('call','sys.format_time', array('timestamp' => $timestamp));

if ('' !== $extend)
{
return $extend;
}
else
{
return date(_time_format, $timestamp);
}
}
Registrace eventu
_extend('reg', 'sys.format_time', function($args){

$output="";
// nejake zpracovani
$output.=TimeInterval::toString($args['timestamp']);

return $output;

});
#020631
golfin
Děkuji vám pánové, docela jste mi mile překvapili. Chci se zeptat, jak moc by takový event zatížil systém? Jak píšete pane Shira, Ve verzích 7.x není event pro přetížení _formatTime(). Hádám, že by to mohlo dělat problém. Pane Daněk, už jsem na vaši třídu koukal, je zajímavá. Ty dny by se tam daly dodělat. Uvidím, zda bych to použil, děkuji za nabídku. A ještě jednou děkuji vám oběma. Pomohli jste mi. 1
#020632
Shira
Nezatížil, ale určitě nemám v plánu kvůli 1 události vydávat další verzi 1

Event si tam klidně přidej, v nové řadě bude nějaký ekvivalent.
#020633
golfin
To je jasný, 1 . Díky