Timestamp do formátu např "před 5 minutami "
- Fyasko
- Člen | 106
Ahoj, kdysi jsem si koupil knihu od Jakuba Vrány(1001 triků a tipů pro PHP) ve které jsem narazil na fci která mi čas převede do stejného formátu jako teď vidíte u mého příspěvku resp. Před jakou dobou jsem toto napsal. No k věci. Nemůžu přijít na to jakým způsobem tuto fci použít. Mam model → z něj volám např seznam jmen a timestamp do presenteru → z presenteru do layoutu.. Může někdo poradit jak vytáhnout z query ten timestamp a jeho formát před renderem změnit tou mou fcí?
- David Klouček
- Člen | 57
Stáhneš si tenhle helper https://github.com/…/Helpers.php, v presenteru zaregistruješ:
$this->template->registerHelper('timeAgoInWords', 'Helpers::timeAgoInWords');
A normálně v šabloně uděláš např.:
{$row->last_activity|timeAgoInWords}
Editoval David Klouček (18. 8. 2014 20:56)
- David Kudera
- Člen | 455
Jo tak to je fajn :-) možná to bylo problémový jen u loaderů , kde jsem to musel předělat. A nebo možná nemusel a jenon mi vadilo, že mi PhpStorm nadával, že je to deprecated? Přesně si už nepamatuju, každopádně je ale asi dobrý přepsat si deprecated věci
Editoval David Kudera (18. 8. 2014 22:12)
- Šaman
- Člen | 2659
Aha, tak já to dělám v BasePResenteru a BaseControl v metodě CreateTemplate:
<?php
/**
* @return ITemplate
*/
protected function createTemplate()
{
$template = parent::createTemplate();
$template->registerHelper('md', 'Annivers\Helpers::md');
$template->registerHelper('daysTo', 'Annivers\Helpers::daysTo');
return $template;
}
?>
- kloban
- Člen | 123
David Klouček napsal(a):
Stáhneš si tenhle helper https://github.com/…/Helpers.php, v presenteru zaregistruješ:
$this->template->registerHelper('timeAgoInWords', 'Helpers::timeAgoInWords');
A normálně v šabloně uděláš např.:
{$row->last_activity|timeAgoInWords}
Ahoj, chcu se zeptat kam mám v adresářové struktuře nette tento helper
nahrát aby se mi načetl?
Díky Dan
- Fyasko
- Člen | 106
Tak s příchodem nette 2.3 se vracím k nastavení helperů. Zdá se, že tak jak se to nastavovalo v předchozí verzi, to zde nejde. Četl jsem a čtu už několik hodin na internetu, zkouším různé varianty, ale helper ne a ne rozchodit. „Filter ‚md5‘ is not defined.“ dál se nikdy nedostanu. Nemá zde někdo funkční návod jak na to? Předem díky ;)
- Mysteria
- Člen | 797
Tohle používám od 2.2. a i ve 2.3 mi to funguje…
Jeden helper:
$this->template->addFilter('number', function($s, $d = 0) { return number_format($s, $d, ',', "\xe2\x80\x87"); });
Více helperů:
$this->template->addFilter(NULL, ['\Utils\Helpers', 'loader']);
class Helpers extends \Nette\Object {
const DATE_NORMAL = 1, DATE_BEFORE = 2, DATE_AFTER = 3;
public static function loader($helper) {
if (method_exists(__CLASS__, $helper)) return call_user_func_array("\Utils\Helpers::$helper", array_slice(func_get_args(), 1));
}
public static function dateString($date, $mode = self::DATE_NORMAL, $precision = 3) {
...
}
}
- Fyasko
- Člen | 106
třída BasePresenter:
namespace FrontModule
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
function beforeRender()
{
$this->template->addFilter(NULL, ['Helpers\Helpers', 'loader']);
}
}
třída Helpers:
namespace Helpers;
class Helpers extends \Nette\Object
{
public static function loader($helper)
{
if (method_exists(__CLASS__, $helper)) return call_user_func_array("Helpers\Helpers::$helper", array_slice(func_get_args(), 1));
}
public static function md5($value)
{
return md5($value);
}
}
template:
{$value|md5}
Asi jsem to nepochopil správně.. Dřív mi stačil jeden řádek a bylo hotovo.. teď v tom strašně plavu :/
- David Grudl
- Nette Core | 8218
Dřív:
$this->template->registerHelper('md5', 'md5');
Dnes:
$this->template->registerHelper('md5', 'md5');
// a nebo
$this->template->addFilter('md5', 'md5');
- Mysteria
- Člen | 797
Tak jsem u sebe zkusil tvůj kód a normálně mi to taky šlape. Výpis v šabloně stejný jako u inline loadingu filtrů.
$this->template->addFilter(NULL, ['Helpers\Helpers', 'loader']);
<?php namespace Helpers;
class Helpers extends \Nette\Object {
public static function loader($helper) {
if (method_exists(__CLASS__, $helper)) return call_user_func_array("Helpers\Helpers::$helper", array_slice(func_get_args(), 1));
}
public static function md5($value) {
return md5($value);
}
}
- David Grudl
- Nette Core | 8218
Pak si nerozumíme. „Co jste napsal jako dřív mi opravdu jelo ve verzi 2.2“ – chápal jsem to tak, že ve 2.3 to nejede.
- Fyasko
- Člen | 106
To nemám.. Možná jsem na něco zapomněl, ale v takovéto situaci to funguje v originálním projektu a v jeho kopii nikoliv.
Base presenter
<?php
namespace FrontModule;
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
function beforeRender()
{
$this->template->addFilter(NULL, ['Helpers\Helpers', 'loader']);
}
}
?>
Soubor s helperama
<?php
namespace Helpers;
class Helpers extends \Nette\Object
{
public static function loader($helper)
{
if (method_exists(__CLASS__, $helper)) return call_user_func_array("Helpers\Helpers::$helper",
array_slice(func_get_args(), 1));
}
public static function md5($value)
{
return md5($value);
}
}
?>
Podle mě je to stejně jako se zde píše :D už vážně nevím proč jednou ano a podruhé ne :)
Btw chyba LogicException: Filter ‚md5‘ is not defined.
Editoval Fyasko (17. 8. 2015 22:29)