ФорумПрограммированиеPHP для идиотов → Профи обосрались - 2. Partial classes, base functions extending

Профи обосрались - 2. Partial classes, base functions extending

  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 28 апреля 2010 г. 22:39, спустя 6 часов 23 минуты 12 секунд

    цепочка обязанностей нужна
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 28 апреля 2010 г. 22:44, спустя 4 минуты 45 секунд


    цепочка обязанностей нужна
    нахуй!
    Спустя 62 сек.
    <?php
    abstract class FO_Base_Sefurls extends FormObject_Plugin
    {
    public function __construct()
    {
    $slug = new FOField_Textbox("slug", "URL");
    $slug->addValidator(new FOValidator_NoEmpty());
    $this->addField($slug, "SEO");

    $this->addField(new FOField_Textbox("meta_keywords", "Meta Keywords"), "SEO");
    $this->addField(new FOField_Textbox("meta_description", "Meta Description"), "SEO");
    }

    public abstract function getLinkId($id);

    public function getItemTable()
    {
    return "sefurls";
    }

    public function getItem($id)
    {
    return $this->getDb()->get($this->getItemTable(), array(
    "url" => $this->getLinkId($id)
    ));
    }

    public function onAfterEdit($data, $id, $form)
    {
    $this->updateLink($data, $id);
    }

    public function onAfterNew($data, $id, $form)
    {
    $this->updateLink($data, $id);
    }

    public function onAfterDelete($data, $id, $form)
    {
    $this->getDb()->delete($this->getItemTable(), array(
    "url" => $this->getLinkId($id)
    ));
    }

    protected function updateLink($data, $id)
    {
    $url = $this->getLinkId($id);

    $r = $this->getDb()->get($this->getItemTable(), array("url" => $url));
    if(!$r)
    {
    $data['url'] = $url;

    $this->getDb()->insert($this->getItemTable(), $data);
    }
    else
    {
    $this->getDb()->update($this->getItemTable(), $data, array(
    "url" => $url
    ));
    }
    }
    }


    вот такой вот очаровательный плагинчик к форме получился имхо, самодостаточный базовый класс, на основе которого я дальше расширяю функционал

    например seourls для отелей - вуаля :)
    <?php
    require_once 'FO_Base.part.Sefurls.php';

    class FO_Hotels_Sefurls extends FO_Base_Sefurls
    {
    public function getLinkId($id)
    {
    return "hotels/$id";
    }
    }
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!