Feb 09

Блин, “всё гениальное - просто”. И решение моей проблемы оказалось до ужаса простым, причем думать даже не пришлось - просто как-то случайно подумалось…

Для начала небольшое уточнение - все места, где мне нужно получать все записи (а не только “одобренные”) находятся в одном или нескольких модулях (компонентах, если кому так больше нравиться) системы (например, пользовательское изменение данных в уже добавленной, но еще неодобренной записи и админка).

Для тех, кто не читал предыдущий пост - советую всё же прочитать.

Так вот, как я уже сказал, решение оказывается очень простым - мы изменяем ту самую Product::fetchByParameters(), которую вызывают все остальные функции выбирающие записи из таблицы (т.е. где-то внутри себя они вызовут именно fetchByParameters() для именно выбора записей). В предыдущем посте я написал, что делать этого нельзя - т.к. мы теряем возможножность доступа к неодобренным записям, но я забыл одну маленькую деталь - а ведь можно сделать так:

class Product {
  public static $showUnapproved = false;

  private static function fetchByParameters($sql)
  {
    if(!self::$showUnapproved) {
      // добавляем "WHERE approved = '1'" в наш sql-запрос
    }
    ...
  }

   ...
}

Теперь у нас по умолчанию будут везде показываться только approved-записи, а для нужных модулей в каком-нибудь preExecute для контроллера нужно добавить Product::$showUnapproved = true.

Поддерживать такой код гораздо удобнее, чем во всех остальных случаях.

written by fxposter \\ tags:


4 Responses to ““approved” and “unapproved” records: решение”

  1. 1. Yuri Baburov Says:

    мда….
    если fetchByParameters($sql, $showUnapproved = false) хуже,
    то надо бы заняться доделкой библиотек, которые пользуют твой код.
    потому что такие скрытые состояния делать не рекомендуется по очевидным причинам.

  2. 2. FX Poster Says:

    fetchByParameters вызываю не я, а другие функции класса – мне их все переписывать? Я считаю, что смысла нет. :)

  3. 3. Sokiche Says:

    Product::$showUnapproved = true

    Вообще, насколько я знаю, нужно писать Product::showUnapproved = true
    Т.е. знак $ лишний

  4. 4. FX Poster Says:

    Мне вот непонятно – зачем говорить то, в чем не уверен, а особенно то, что очень легко проверить?

Leave a Reply