Dzisiaj będzie wpis o ułatwianiu życia użytkownikom paneli administracyjnych. Chodzi tutaj o sytuację, gdy użytkownik naszej strony wkleja byle jak jakiś tekst z Worda do TinyMCE, a następnie dziwi się, że na stronie wychodzi kaszana.
Parę rzeczy da się poprawić z automatu poprzez przetworzenie przez procesor tekstu. Skąd taki wziąć? A napiszemy sobie sami.
W tym wpisie stworzymy „rusztowanie”, a w następnej części parę modułów robiących jakieś konkretne rzeczy.
Pierwsze czego potrzebujemy to interfejs pojedynczego modułu przetwarzającego tekst. Będzie banalnie prosty: metoda process pobiera stringa i zwraca przetworzonego stringa.
interface TextJob { public function process($string); }
Dalej piszemy klasę procesora tekstu.
class TextProcesser { private $jobsToDo = array(); private function __construct() {} public static function getInstance($params = array()) { $textProcesser = new TextProcesser(); foreach ($params as $param) { try { if (!class_exists($param)) throw new Exception('Klasa ' . $param . ' nie istnieje!'); $param = new $param; if (!($param instanceof TextJob)) throw new Exception('Klasa ' . $param . ' nie obsluguje interfejsu TextJob!'); } catch (Exception $e) { echo $e->getMessage(); die(); } $textProcesser->addJob($param); } return $textProcesser; } private function addJob(TextJob $tj) { $this->jobsToDo[] = $tj; } public function processJobs($string) { foreach ($this->jobsToDo as $job) { $string = $job->process($string); } return $string; } }
Po kolei:
- Zmienna
$jobsToDotrzyma tablicę prac do wykonania. - Klasy nie będziemy tworzyć poprzez konstruktor, dlatego został zmieniony na prywatny.
- Statyczna metoda
getInstancetworzy obiekt procesora i przy okazji sprawdza czy podana tablica$paramszawiera istniejące klasy i czy implementują one interfejsTextJob. - Metoda
addJobdodaje kolejną pracę do wykonania do kolejki. processJobswykonuje właściwą robotę — pobiera stringa do przetworzenia i w kolejności dodania prac przetwarza go.
Co mamy do tej pory? Klasę, do której możemy dodawać tyle konkretnych zadań ile chcemy, o ile tylko implementują interfejs TextJob. W następnej części będziemy wyrzucać zbędne spacje, dodawać twarde spacje i szukać linków.
Podobne wpisy:
