Mad_Man

Mad_Man
Рейтинг
162
Регистрация
10.11.2008
Интересы
Рыбалка
Born USSR
chelseymay:
Согласна, иначе пользователи начинают "разбегаться". А если они видят, что на сайте есть правила и им следуют, то начинают чувствовать себя более комфортно. Охотнее рекомендуют ресурс знакомым или рассказывают о нем новичкам.

Шта? Весь этот оргазм от того, что кто-то соблюдает правила?

kostyanet:
Ну то есть модель существует, в неявном виде, как метод класса. Чтобы ее не приходилось размножать под разнообразный контекст, мы разбираем запрос, или пишем класс конструктора запроса, который можно заюзать для аналогичных иерархичных отношений в БД. Самый простой конструктор для самых простых запросов состоит из методов одноименных кляузам SQL. Например


protected function select($item=null){
return 'select id, title, subttle';
}

protected function from($item=null){
return ' from news';
}

protected function where($item=null){
if($item['pid']!=0)
return ' where pid='.$item['id'];
}

protected function order(){
$ord = new COrder();
return $ord->sql();
}

protected function limit(){
$this->pgn= new CPagination();
return $this->pgn->calc_limit();
}

protected function query($item=null){
$sql=$this->select($item)
.$this->from($item)
.$this->where($item)
.$this->order()
.$this->limit();
$this->data=$this->mysqli->query_use($sql)->fetch_all(MYSQLI_ASSOC);
}


Такой класс будет выдавать листинг всего что есть в таблице News по страницам в порядке определенном параметрами в search string. Если определена категория - то по категории. Теперь под любой контекст можно унаследоваться и поменять/модифицировать методы контруктора запроса используя одну и ту же "модель" - метод query(); Например для одной статьи нам нужен еще и текст:


protected function select($item=null){
return parent::select($item).',text';
}

protected function where($item=null){
return ' where id='.$item['id'];
}


Методы рендера в том же самом классе. Обычный паттерн методов before_render(), render(), after_render() - вызывается из __toString() в охвате try-catch на случай вывести текстом глюки.

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

Где-то в классе каталога в фазе подготовки данных (модели) профтыкаем


$news = new CSearchNews();
$news->query($item);


И теперь когда этот $news окажется в конкатенации рендера каталога, то, если там есть что показать - $news покажет через свой __toString(), а если нечего - покажет пусто.

$item = это небольшой массив который делается по запросу к классу отвечающему за урлы. Мы же должны из example.com/news/article_foo_about_bar_and_some_baz получить соответствующие данные из дерева сайта. Получаем и кладем в $item. Имя сугубо условное.

ORM писать с нуля топикстартер явно не потянет.

http://rude-php.com/rude-php.zip (сама либа с ORM)

http://rude-php.com/rude-orm.pdf (документация к ORM, первые 4 страницы - скучная теория, дальше по теме)

Линки выше - компактный фреймворк (не, серьёзно, действительно небольшой), который писался под нужды продакшена с джумлой 2000-х годов. Необходимо было перевести всё это мракобесие на новые рельсы, потому как звать $database по global уже утомляло.

Рекомендую в первую очередь для тех, кто до сих пор пишет классы для работы с БД на mysql_* либе или же вовсе не в курсе как можно юзать СУБД с комфортом.

kostyanet:
По делу. Класс новостей (статей) на сайте это явный виджет. Ему не нужен контроллер и модель в упор не стучит. Потому что листинг надо мочь вывести в любую врезку, а равно статью вывести в любую секцию. Например выводим листинг релевантный запросу в каталоге. Или печатаем связанную статью под листингом товаров. Ну какой там экшон и в чем разница моделей? Пишется класс со всем скарбом, можно сначала интерфейс, или абстрактный. Потом наследуемся с него под разные нужды, или тупо перечисляем все методы под разные нужды и вперде.

Два чая этому человеку.

Sly32:
И вам спасибо, добрый человек))) Ценно, буду знать. А как тогда обработать случай с отсутствием данных?

http://php.net/manual/ru/function.trigger-error.php


<?

class exception
{
public static function notice($message) { return static::trigger($message, E_USER_NOTICE); }
public static function warning($message) { return static::trigger($message, E_USER_WARNING); }
public static function deprecated($message) { return static::trigger($message, E_USER_DEPRECATED); }
public static function error($message) { return static::trigger($message, E_USER_ERROR); }

private static function trigger($error_message, $error_type)
{
return trigger_error($error_message, $error_type);
}
}

+ в качестве хорошего бонуса можно прочесть коммент #2 из линка выше и немного пропатчить простейший класс.

В самом методе, в котором данных не нашлось, возвращаете null, либо пустой набор данных ожидаемого типа (пустой массив если ожидается массив, пустую строку если строка, stdClass класс если ожидается объект и т.д.)

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

Raskrutchik:
Да да, такая несусветная, такое балобольство по такому важному вопросу, что смешно читать ваше сообщение.
Я имел ввиду скорость ростелекома в случае Redbaron_chaos, хотелось обойтись без описания всевозможных стандартов.
В регионах Ростелеком монополист и его adsl исходящий канал ограничен 0.5-0.6 mbps в секунду. Поэтому Redbaron_chaos не может нормально работать при озвученном ограничении.

Ну так и указывайте развёрнутые ответы. В противном случае не удивляйтесь реакции на странную фразу про ADSL.

Raskrutchik:
Для adsl исходящая максимум 64, так что это нормально.

Несусветная глупость. Почитайте тех. матчасть прежде чем балаболить.

m0ntag:
Где же здесь собака порылась, как таки удалить новости?)

LEFT JOIN в помощь.

Kepus:
С официальной директории wordpress

Я так понимаю, вы пытались написать "с официального репозитория".

Фигня только вот в следующем:


[look@me wp-super-cache]$ grep -rl "social.png" .
[look@me wp-super-cache]$ grep -rl "WP_OPTION" .
[look@me wp-super-cache]$

Ваш плагин модифицирован вредоносным кодом, ничего подобного в нём быть не может. Ваш сайт - дряное решето, а вы не отличаете причину от следствия.

Kepus, лол. Батенька, а где вы плагин-то качали?

Всего: 4397