Блин, “всё гениальное - просто”. И решение моей проблемы оказалось до ужаса простым, причем думать даже не пришлось - просто как-то случайно подумалось…
Для начала небольшое уточнение - все места, где мне нужно получать все записи (а не только “одобренные”) находятся в одном или нескольких модулях (компонентах, если кому так больше нравиться) системы (например, пользовательское изменение данных в уже добавленной, но еще неодобренной записи и админка).
Для тех, кто не читал предыдущий пост - советую всё же прочитать.
Так вот, как я уже сказал, решение оказывается очень простым - мы изменяем ту самую 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.
Поддерживать такой код гораздо удобнее, чем во всех остальных случаях.






February 10th, 2008 at 00:34
мда….
если fetchByParameters($sql, $showUnapproved = false) хуже,
то надо бы заняться доделкой библиотек, которые пользуют твой код.
потому что такие скрытые состояния делать не рекомендуется по очевидным причинам.
February 10th, 2008 at 00:36
fetchByParameters вызываю не я, а другие функции класса - мне их все переписывать? Я считаю, что смысла нет. :)
March 27th, 2008 at 18:38
Product::$showUnapproved = true
Вообще, насколько я знаю, нужно писать Product::showUnapproved = true
Т.е. знак $ лишний
March 27th, 2008 at 23:08
Мне вот непонятно - зачем говорить то, в чем не уверен, а особенно то, что очень легко проверить?