- 1
- 2
if ( (($i%3) == 0) || ($i==$cnt) ) { // $i mod 3
if ($i == 6) {
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+144
if ( (($i%3) == 0) || ($i==$cnt) ) { // $i mod 3
if ($i == 6) {
Без комментариев.
+145
if ($test_domain->num_rows or true )
Обычная проверка на количество строк в запросе... Видимо, не всегда попадало в условие, и автор решил добавить or)
+142
<?php
public
function filter()
{
$manufacturers = Manufacturers::all();
$products = Products::where('category', '=', Input::get('category'))->get();
if (Input::get('size') != 'notselected')
{
$size = Input::get('size');
}
if (Input::get('category') == 3)
{
if (Input::get('type') != 'notselected')
{
$products = Products::where('category', '=', Input::get('category'))->where('type', '=', Input::get('type'))->get();
}
}
if (Input::get('manufacturer') != "notselected")
{
$products = Products::where('category', '=', Input::get('category'))->where('manufacturer', '=', Input::get('manufacturer'))->get();
}
if (Input::get('min') != 0 and Input::get('max') != 0)
{
$products = Products::where('category', '=', Input::get('category'))->whereBetween('price', array(
Input::get('min') ,
Input::get('max')
))->get();
if (Input::get('size') != "notselected")
{
$products = Products::where('category', '=', Input::get('category'))->where('size', 'LIKE', "%$size%")->whereBetween('price', array(
Input::get('min') ,
Input::get('max')
))->get();
}
else
{
$products = Products::where('category', '=', Input::get('category'))->whereBetween('price', array(
Input::get('min') ,
Input::get('max')
))->get();
}
if (Input::get('manufacturer') != "notselected")
{
$products = Products::where('category', '=', Input::get('category'))->where('manufacturer', '=', Input::get('manufacturer'))->whereBetween('price', array(
Input::get('min') ,
Input::get('max')
))->get();
}
else
{
$products = Products::where('category', '=', Input::get('category'))->whereBetween('price', array(
Input::get('min') ,
Input::get('max')
))->get();
}
}
if (Input::get('minim') != 0)
{
$products = Products::where('category', '=', Input::get('category'))->where('price', '<', Input::get('minim'))->get();
if (Input::get('size') != "notselected")
{
$products = Products::where('category', '=', Input::get('category'))->where('size', 'LIKE', "%$size%")->where('price', '<', Input::get('minim'))->get();
}
else
{
$products = Products::where('category', '=', Input::get('category'))->where('price', '<', Input::get('minim'))->get();
}
if (Input::get('manufacturer') != "notselected")
{
$products = Products::where('category', '=', Input::get('category'))->where('manufacturer', '=', Input::get('manufacturer'))->where('price', '<', Input::get('minim'))->get();
}
else
{
$products = Products::where('category', '=', Input::get('category'))->where('price', '<', Input::get('minim'))->get();
}
}
if (Input::get('maxim') != 0)
{
$products = Products::where('category', '=', Input::get('category'))->where('price', '>', Input::get('maxim'))->get();
if (Input::get('size') != "notselected")
{
$products = Products::where('category', '=', Input::get('category'))->where('size', 'LIKE', "%$size%")->where('price', '>', Input::get('maxim'))->get();
}
else
{
$products = Products::where('category', '=', Input::get('category'))->where('price', '>', Input::get('maxim'))->get();
}
if (Input::get('manufacturer') != "notselected")
{
$products = Products::where('category', '=', Input::get('category'))->where('manufacturer', '=', Input::get('manufacturer'))->where('price', '>', Input::get('maxim'))->get();
}
Вот так был реализован фильтр интернет-магазина. Не ну а хули?
+143
if (strlen($this->post['Name']) >= 3) {
$p = preg_split('/\s+/', $name) + [' ', ' '];
sort($p);
$permutation = [$p[0], $p[1], $p[2], $p[0], $p[1], $p[0], $p[2], $p[1], $p[0]];
$name = join(' ', $permutation);
$list = Model_Students::searchStudentsByName($name, $facultyID, $gradeID, $groupID);
}
С ребятами запилили полнотекстовый поиск фио. Функция из модели — вызов MySQL процедуры.
Реалия простая — MySQL не умеет в split, не умеет в переменное количество параметров, не умеет в нечёткий поиск. Выкручиваемся как можем.
+144
if($data_user['status']==2){
echo "<center><table class='wdt green-header'><tr><td align='left'><a href='/adm_panel/index.php'><font color='#fff'><b><div class='title'>Админ панель</td></b></font></a></center></div>";
}
if($data_user['status']==3){
echo "<center><table class='wdt green-header'><tr><td align='left'><a href='/adm_panel/index.php'><font color='#fff'><b><div class='title'>Админ панель</td></b></font></a></center></div>";
}
if($data_user['status']==4){
echo "<center><table class='wdt green-header'><tr><td align='left'><a href='/adm_panel/index.php'><font color='#fff'><b><div class='title'>Админ панель</td></b></font></a></center></div>";
}
if($data_user['status']==5){
echo "<center><table class='wdt green-header'><tr><td align='left'><a href='/adm_panel/index.php'><font color='#fff'><b><div class='title'>Админ панель</td></b></font></a></center></div>";
}
Пожалуй, это самый божественный код, который я когда либо видел. Похлопаем кодеру, написавшему этот код(не я, двиг из паблика):D
+144
function deadlineDatecompare(AdminOrder $a, AdminOrder $b) {
$nullresult = nullcompare($a, $b);
if ($nullresult !== null) return $nullresult;
//В 2999 году заменить
$aDate = new DateTime('2999-12-31');
$bDate = new DateTime('2999-12-31');
foreach ($a->get_existingitems() as $item) {
foreach ($item->get_deadlines(true) as $deadline) {
if (!($deadline->completed || $deadline->missed)) {
$aDate = min($deadline->deadlineDateWithTime, $aDate);
}
}
}
foreach ($b->get_existingitems() as $item) {
foreach ($item->get_deadlines(true) as $deadline) {
if (!($deadline->completed || $deadline->missed)) {
$bDate = min($deadline->deadlineDateWithTime, $bDate);
}
}
}
//сравниваем через timestamp для производительности
$aTimestamp = $aDate->getTimestamp();
$bTimestamp = $bDate->getTimestamp();
if ($aTimestamp > $bTimestamp) {
//дата позже, значит выше заказ ставим
return -1;
} elseif ($aTimestamp < $bTimestamp) {
return 1;
} else return 0;
}
Новый проект
+143
function menu_config($tree,$parent)
{
$row=$this->phoenixDatabase->executeQuery("select * from ".$this->tableName."menu_config where website_menu_config_tree=$tree",$tree);
while ($row=$this->phoenixDatabase->getNextResult($tree))
{
$this -> content_menu_string_off[$tree][$row["website_menu_config_level"]]=stripslashes($this->phoenixDatabase->getResultAsStream("website_menu_config_off","from ".$this->tableName."menu_config where website_menu_config_tree=$tree and website_menu_config_id=".$row["website_menu_config_id"]));
$this -> content_menu_string_on[$tree][$row["website_menu_config_level"]]=stripslashes($this->phoenixDatabase->getResultAsStream("website_menu_config_on","from ".$this->tableName."menu_config where website_menu_config_tree=$tree and website_menu_config_id=".$row["website_menu_config_id"]));
$this -> content_menu_string_start[$tree][$row["website_menu_config_level"]]=stripslashes($this->phoenixDatabase->getResultAsStream("website_menu_config_start","from ".$this->tableName."menu_config where website_menu_config_tree=$tree and website_menu_config_id=".$row["website_menu_config_id"]));
$this -> content_menu_string_space[$tree][$row["website_menu_config_level"]]=stripslashes($this->phoenixDatabase->getResultAsStream("website_menu_config_space","from ".$this->tableName."menu_config where website_menu_config_tree=$tree and website_menu_config_id=".$row["website_menu_config_id"]));
$this -> content_menu_string_end[$tree][$row["website_menu_config_level"]]=stripslashes($this->phoenixDatabase->getResultAsStream("website_menu_config_end","from ".$this->tableName."menu_config where website_menu_config_tree=$tree and website_menu_config_id=".$row["website_menu_config_id"]));
}
}
Какие-то манипуляции с меню сайта.
+142
Ситуация такая:
Самописный движок.
MVC но не очень строго.
Получился толстый контроллер, моделей нет, простой ORM чисто по таблицам.
Шаблонизатор поддерживает только пару функций - цикл, вывод переменной, условие. Условие только на ИСТИНА или ЛОЖЬ.
Движок писался по принципу, что каждая страница имеет запись в основной таблице, где есть информация по урл, родительской странице и т.п., ну и название контроллера который за нее отвечает.
т.о. у нас 27 контроллеров для разных типов страниц, и несколько тысяч страниц в базе.
в юии есть такой компонет как урлконтроллер
он расширяется отдельным классом правил, написал два метода, и все ссылки конвертируются в роуты, а роуты в ссылки как родные..
В роутах Ларавел я не нашел как это сделать нормально.
Я начал упорядочивать всё, есть версия где нормальные абстрактные контроллеры, урлменеджер, и ответственности более менее правильно разграничены, но эта версия не полностью рабочая, есть пару небольших глюков.
В новой версии некоторые функции админки неверно отрабатываются. Мне кажется лучшим вариантом было бы, если бы вы начали общую структуру делать, тот же урлменеджер и т.п., а я бы исправил глюки, и уже добивать эту самую вторую версию.
Самый простой контроллер выглядит вот так:
http://pastebin.com/Rt5sN91V
$info->allowedParent = '*';
это список контроллеров которые могут быть "родителями" для нашей страницы
$info->allowedChild = FALSE;
Список дочерних страниц, которые могут быть у нашей страницы. В данном случае таких не может быть, а родитель может быть любой.
$info->unique = TRUE;
это параметр означает, что страница с таким контроллером на сайте может быть только одна. Если уже создали, то новую не создадим.
templ в базе и т.п. означает контроллер а не шаблон. Как-то так в начале повелось, а до рефакторинга так и недобрались.
В новой в папке контроллеров я разделил по степени их сложности. Простейшие, это просто наследование от базового, легкие, это где только read и в корне это более-менее сложные.
Пользователь с рутовыми правами:
mendel
пароль 1709
админки как таковой там нет.
При авторизации админа появляется меню "служебные", но админка не там.
По сути админка у нас на каждой внутренней ссылке, в контекстном меню.
Например если правой кнопкой щелкнуть по логотипу, то откроется менюшка для главной страницы.
Если на ссылку пункта меню - меню для нее, ссылка на новость - меню новости...
У всех контроллеров кроме авторизации стандартный CRUD + сортировка (перемещение вверх/вниз относительно соседей в списке), и файлы.
Все файлы связанные с той или иной страницей привязаны к ней же.
По хорошему надо было делать в той же таблице, чтобы в общем дереве, но они отдельно идут. т.е. если статья называется /статьи/раздел/статья.хтмл
то картинки из нее это /статьи/раздел/статья/картинка.жпг
У контролера также есть функция добавления/удаления картинок.
Естественно оно в абстрактном классе идет.
Да, валидаторы у меня в контроллере, не пугайтесь.
Желательно чтобы модели были Eloquent или если есть весомые причины с другим ОРМ, то можно другой. Шаблоны можно хоть базовые, хоть блейд, но не мои.
И по роутам я бы расширял роуты/реквесты/респонсы, но я с ларавел еще не настолько разобрался чтобы понять где именно надо расшириться... Чую что тут тоже можно в два метода уложиться, но пока не вижу где.
Это Тех задание к предыдущему говнокоду - прошу нормальных спецов прокомментировать.
Я считаю что это полная жопа!
+143
class _mapMod extends _dummyMod {
public static function info() {
$info = parent::info();
$info->name = 'Карта сайта';
$info->version = '0.1.0';
$info->description = 'Выводит все существующие ссылки на сайте';
$info->allowedParent = '*';
$info->allowedChild = FALSE;
$info->unique = TRUE;
$info->readTemplate = '_map/read';
return $info;
}
public function read() {
global $_sql;
$tree = new _tree;
$root = $_sql->_tree->read1('_level = 0');
$map = $tree->sortTree($tree->subChilds($root['id']));
// отразим уровень вложенности
foreach($map as $k=>$v) $map[$k]['star'] = str_repeat(' ',$map[$k]['_level']-$me['_level']-1);
view::say('map', $map);
//
view::templ($this->info()->readTemplate);
}
}
Это типа контроллер.
Понабирают блять по объявлению.
+141
/* Костылек START */
// Ибо всё тлен
function m_r_e_s(&$arr){
foreach($arr as $k=>$v){
if(is_array($v)) m_r_e_s($v);
else $arr[$k]=mysql_real_escape_string($v);
}
}
m_r_e_s($_GET);
m_r_e_s($_POST);
/* Костылек END */