Pokud chcete z nějakého důvodu nahrazovat části textu pomocí zástupných znaků, tak jsme v rámci WP frameworku připravili komponentu KT_Content_Replacer. Tato komponenta je určená především pro spolupráci s další komponentou KT_Mailer, ale její využití je i obecné.
Následující kód ukazuje základní použití třídy KT_Content_Replacer:
1 2 3 4 5 6 7 8 |
$text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit: {web:název}."; $contentReplacer = new KT_Content_Replacer(); if(contentReplacer->check($text)) { $text = contentReplacer->update($text); } |
Vzhledem k tomu, že proměnná $text, ve které je uložen obsah pro náhradu v Content Replaceru, obsahuje zástupnou sekvenci: „{web:název}“, tak právě tato sekvence bude nahrazena v tomto případě v podstatě hodnotou bloginfo(‚name‘).
Obecné zástupné sekvence jsou jednak metody getXxx, které vracejí hodnoty víceméně z WP funkce bloginfo, resp. ze třídy KT_WP_Info a dále zástupné sekvence dohromady definované v poli. Uživatelsky se pak zástupné sekvence zapisují ve složených závorkách:
Takže v rámci Content Replaceru „{web:název}“ vrátí název WP webu… Stejně pak fungují vlastní zástupné sekvence s tím rozdílem, že jako zdroj dat (metody) je použit vložený „item“, tj. instance třídy pro kterou je daný Content Replacer napsán.
Pokud si chcete udělat vlastní Content Replacer, stačí vytvořit novou třídu, podědit ji od KT_Content_Replacer a přidat vlastní logiku. Vlastní implementace KT_Content_Replaceru dává smysl, pokud máte i nějaký specifický KT_Mailer, řekněme např. KT_Car_Mailer. Potom je vhodné si vytvořit právě i třídu KT_Car_Content_Replacer, která zjednoduší vyvolávání takto specifického maileru a práci s ním. Implementace by mohla vypadat následovně:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<?php class KT_Car_Content_Replacer extends KT_Content_Replacer { private static $carTags = array( "getId" => "auto:id", ); function __construct($carId = null) { if (kt_is_id_format($carId)) { // je zadáno ID $carId = kt_try_get_int($carId); if ($carId > 0) { $car = new KT_Car_Model($carId); parent::__construct(self::$carTags, $car); // tak založení včetně odpovídajícího auta } else { throw new InvalidArgumentException("carId"); } } else { parent::__construct(self::$carTags); // založení bez auta, nutné dodat později } } public function setItem(KT_Car_Model $car = null) { parent::setItem($car); return $this; } public function setCarById($carId) { if (kt_is_id_format($carId)) { $this->setItem(new KT_Car_Model($carId)); return $this; } throw new InvalidArgumentException("carId"); } } |
Pokud potřebujete Content Replacer pro Mailer, tak stačí v podstatě definovat jen vlastní Content Replacer, např. právě KT_Car_Content_Replacer a ten propojit s KT_Mailerem a samotná funkčnost už se pak provádí automaticky.
Odebírejte novinky z FW
Sledujte nás!
Follow @BriloTeam!