"Дядя, что я сделал неправильно?" aka порка кода

Pigmeich

Новичок
"Дядя, что я сделал неправильно?" aka порка кода

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

Суть в порке - указать на неправильные приемы решения задач. И объяснить какие правильные, если получиться.

Кто первый?
 

HEm

Сетевой бобер
в смысле, ты хочешь заняться поркой? или выкладывать в форум на всеобщее осуждение? куски кода или полные системы? свои или чужие?

полнее объясни суть, пожалуйста
 

Sender

Новичок
Выложил бы свой движок на общественное порицание, да боюсь без док там никто не разберется )
 

Pigmeich

Новичок
в смысле, ты хочешь заняться поркой? или выкладывать в форум на всеобщее осуждение? куски кода или полные системы? свои или чужие?
Хз. Могу свои выложить.

Хочется умной темы для обсуждений типа "вот эту функцию из либы почти не надо использовать". Но хз.
 

TutanXamoN

Новичок
Идея нравится.
Думаю можно было бы даже создать отдельную ветку и жестко её модерировать (код допустим только в пасте) обсуждение в теме минимум флейма.

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

TutanXamoN

Новичок
Начнём)
Доаджаксовая реализация динамического селекта связки каталог<->подкаталог, с универсализацией ака вставка связки в любую форму с любыми именами селектов
http://phpclub.ru/paste/1966

ЗЫ. Сильно не порите писал в 14 лет:)
 

Духовность™

Продвинутый новичок
Класс для построения строки навигации вида
<<< << < 1 2 3 4 5 > >> >>>

Класс генерирует только переменные, цифровые. Формированием строки занимается функция шаблона.

Пример использования:

PHP:
// Выводим по 10 ссылок на страницу
$navigation = new navigation(10, 100);
// Стартовый лимит для SQL-запроса
$startLimit = $navigation->getStartLimit();
// Конечный лимит для SQL-запроса
$stopLimit  = $navigation->getStopLimit();

// ($db - объект обычного класса для СУБД)
$res = $db->query('SELECT SQL_CALC_FOUND_ROWS ... FROM ... 
                       LIMIT '.
                   $startLimit.', '.$stopLimit);

// Общее количество записей в таблице без учета LIMIT.
$fres = $db->query('SELECT FOUND_ROWS()');
$count = $fres->getOne();

// Передаем значение в класс для подсчета переменных для формирования строки навигации.
$navigation->setCount($count);
// Необхоимые переменные для формирования строки 
// навигации передаются в переменную с ключевым значением PAGES.
$_HTML['PAGES'] = $navigation->get_all_vars();
в шаблоне:

PHP:
<?
// Параметры строки навигации
$pages_html_params = array(
        // CSS-класс гиперссылки.
	'css.normalLinkClass' => 'navigation_normal_link',
        // CSS-класс открытой в данный момент гиперссылки. 
	'css.activeLinkClass' => 'navigation_active_link', 
	'html.leftLinkLabel'  => 'предыдущая',
	'html.rightLinkLabel' => 'следующая',
	'GET' => array(		// Дополнительные GET-параметры
		'search' => $search,
	),
);
?>

<? if($_HTML['PAGES']['pages_array']): ?>
	<div>Страницы:
                <?=tpl_getPagesString($_HTML, $pages_html_params);?>
	</div>
<? endif; ?>
Полное отделение кода от шаблона. Выводить можно так и сяк.

Класс: http://phpclub.ru/paste/index.php?show=1968
Функция шаблона: http://phpclub.ru/paste/index.php?show=1967

:D
 

dark-demon

d(^-^)b
и что означают эти ёлочки пользователь должен догадаться? ты специализируешься на сайтах для телепатов? :)
 

Духовность™

Продвинутый новичок
Sender
сложно, не спорю. я сам уже ничера в нем не разберусь. но тут дело в том, что я раньше бредил полным отделением HTML от PHP, вот так все и разрослось... а сложно потому, что подразумевается абсолютно любой вид строки навигации. например:

<<< << < 1 2 3 4 5 > >> >>>
<< < 1 2 3 4 5 > >>
< 1 2 3 4 5 >
<<< 1 2 3 4 5 >>>
<<< << 1 2 3 4 5 >> >>>
<<< << < 100-80 80-60 60-40 40-20 > >> >>>
<<< << < 20-40 40-60 60-80 80-100 > >> >>>
и т.д...
 

Sender

Новичок
triumvirat
первые пять случаев твоей навигации для php-класса это один случай. Все пять вариаций можно сформировать на одних данных с помощью шаблонизатора, в котором есть начальные зачатки логических операций. Эти все пять случаев и реализует мой php-класс

Остальные два варианта аналогично для php-класса сжимаются в один набор данных (просто в номер страницы вставляется диапазон, который охватывает страница, а не номер страницы). А вариации аналогично формируются уже шаблонизатором.

Так что твой класс неоправданно сложен :) переписывай :)
 

Фанат

oncle terrible
Команда форума
Pigmeich, хорошее начинание.
Я бы даже отдельный раздел на форуме под это сделал.
Правда, в прошлый раз такая идея не прошла.

Впрочем, тут любая тема, в которой есть код, всегда превращается в порку, безотносительно к сути вопроса %-)

-~{}~ 29.01.08 12:12:

Sender
В свете http://community.livejournal.com/ru_php/1167925.html , как ты объяснишь то, что pager - это класс, а не функция?

-~{}~ 29.01.08 12:18:

triumvirat уж да уж. У тебя не "функция шаблона", а ужас, летящий на крыльях ночи.
Не должно быть никаких "функций шаблона". А только шаблон.
 

Sender

Новичок
*****
Ну тут несколько причин. Самая основная - функция класса слишком простая чтобы там еще и извращаться с установкой параметров и т.п. Писалась быстро. Когда мне потребуется унаследоваться от этого класса (например для организации второго вида навигации), я по максимум перепишу его, выделив общие участки кода в отдельные функции. В общем класс там для будущих усложнений.
Второстепенная - в моем движке autoloader используется.
 

Pigmeich

Новичок
Bakti9rov
Это называется "эксгибиционизм кода"
Смешно. Только вчера читал про эксгибиционизм игроков НРИ.

-~{}~ 29.01.08 13:44:

berkut
о да! отпорите меня) если не лень
http://phpclub.ru/paste/index.php?show=1971
Конструктор. Значение параметра по умолчанию null, но при null происходит вытаскивание параметра из $_SERVER['REQUEST_URI']. Не проще ли написать в значении по умолчанию? Если возражения, что так null не отрабатывает, так и на то что параметр строковый проверки тоже нет.

buildURL. Закладывание на схему mailto. Зачем, если это абстрактный класс?

Еще, нет метода isInternal чтобы в разные цвета ссылки красить.

И зачем нужна иерархия? Какие еще классы кроме URL планировались?
 
Сверху