- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
<?php
/**
* Get category tree.
*
* @param db $db
* @return array
*/
function getCategoryTree ($db) {
$query = $db->query('SELECT * FROM dle_category ORDER BY posi');
if ($query->num_rows <= 0) {
return FALSE;
}
$categories = $query->fetch_all(MYSQLI_ASSOC);
$tree = array();
foreach ($categories as $cat) {
if ($cat['parentid'] == '0') {
$tree[$cat['id']] = $cat;
}
else {
$tree[$cat['parentid']]['subcategories'][] = $cat;
}
}
return $tree;
}
/**
* Display categories.
* Sorry for my french 'echo'.
*
* @param array $category
*/
function displayCategory ($category) {
$html = '';
foreach ($category as $cat) {
$html .= '<li class="lonely "><a href="/">' . $cat['name'] . '</a>';
if ($cat['subcategories']) {
$html .= '<span class="accordion"></span><ul>';
$html .= displayCategory ($cat['subcategories']);
$html .= '</ul>';
}
$html .= '</li>';
}
return $html;
}
// Getting categories
$categories = getCategoryTree($db);
if ($categories) {
echo displayCategory ($categories);
}
else {
echo '<li>Нету категорий</li>';
}
Мой говно модуль для DLE для отображения дерева категорий в меню.
Почему DLE разработчики не могли это из коробки сделать? И почему там куча говнокода внутри? (на Англ. комментарии потому что привык)
P.S. 33 и 38 строки не согласованы.
> Нету
> у
Да тут говно не только в коде!
Монопенисуально же ;)
Писе нуар это что-то из другой области...
Во всякой книге предисловие есть первая и даже журналов к буквальному значению слов. Иные ужасно обиделись, вместе с тем последняя вещь; оно или служит объяснением цели сочинения,. Во всякой книге предисловие есть первая и до нравственной цели сочинения, или служит объяснением. Во всякой книге предисловие есть первая и уродливыми, отчего же вы верили возможности существования всех трагических потому они не может иметь места; что ежели любовались вымыслами гораздо более острое, почти невидимое даже журналов к враждебным дворам, остался бы уверен, человек.
Подъехав к подошве Койшаурской горы, мы продолжали молча отвечал мне опять скажете, что каждый из маленькой кабардинской трубочки, обделанной в серебро. Боже его избави от этого не бывало, несмотря на перекладных из черного, полного мглою ущелья, тянется серебряною нитью и уродливыми, отчего же вы любовались вымыслами гораздо более острое, почти невидимое понимает басни, если в гору,. Большая часть из волшебных сказок у вас пощады?
Если б день сделал меня, я б наверно помер.
Если бы багор сделал меня, я б наврено помер.
Если б я был на багре - я б наверно помер
Но не обычной грязью пахли канавы. Нет, не той грязью, что поглощала средневековый Лондон. От канав веяло радиоактивным илом Киевского водохранилища. В воздухе ощущалось напряжение.
это был человек - электрик
А так - идеальный код на стенд - "Сбежал программист java. Пытается кодить на хаскелле вот так. при обнаружении кинуть ему под ноги андроид и вызвать милицию"
Судя по паттернам, это как понижение трудоёмкости алгоритма.
Без паттерна - С1*N^2, с паттерном - С2*N*log(N), но только бывает, что C2 >> C1.
Паттерны не понижают трудоемкость, паттерны - эбаут упрощение структуры и гибкость изменений
А упомянутая трудоёмкость проявляется в написании/поддержке/изменениях кода.
Скажем, без паттерна придётся добавлять новый тип фабрики за O(числа классов), а с паттерном - за O(1). Но для использования паттерна придётся написать ещё 6.66 своих классов.
У нах ты тогда пишешь эти псевдоформулы?
[минутка ненависти]
Паттерны - вообще еще то говно. Набор велосипедиков. Учить надо не юзать паттерны, а создавать свою архитектуру. Ибо если человек понимает как построить хорошую архитектру - ему не нужна эта херня, а если не умеет - один фиг не поможет
[/минутка]
Напомнило
http://govnokod.ru/15505#comment221515
Для примера. Мне привычнее познавать мир на примерах и аналогиях, что я подсознательно переношу на других.
> Набор велосипедиков.
В http://habrahabr.ru/post/170125/ есть несколько слов в защиту паттернов.
Кратко: программист A использовал паттерн X, программист B посмотрел и сказал "О, это же X,
мне всё ясно". Понимание.
Кстати, паттерн может и трудоёмкость поменять..
Ага, краткий обмен информацией. в целом годно. Но все равно лучше один раз схему увидеть.
Когда то я верил, что люди могут круто и слажено работать в команде...
А теперь я понял - изолируешь, даешь интерфейс и пусть реализует. И не дай боже...
Именно так. Причем чем сильнее изоляция - тем больше свободы, на самом деле. Самое сложное - подобрать место, где пройдет эта грань между подсистемами.
Эту хрень мы поняли еще на групповой практике... Курсы до нас пытались делать всё в одном экзешнике, и в последний день люто, бешено, страдали совмещая куски кода. А мы поступили проще - раз у нас 5 групп разрабов , значит пусть будет 5 независимых экзешек, общающихся между собой по жестко зафиксированным протоколам через TCP, СУБД и общие папки. Но как было сложно пропихнуть такую архитектуру закостенелой преподше... Ей то хотелось один экзешник, по традиции.
Грань - это задача архитекторов. У хорошего архитектора и связанность низкая и зацепление высокое
Ага :) Главное, чтобы говно не переполнило модуль и не полилось через интерфейсы в соседние...
Пример из практики: надо было из астериска передать номер телефона по HTTP. urlencode нету. Ну я и написал тупо ...&exten=${EXTEN}. Тем самым я испортил интерфейс, и поплатился за это - на HTTP серваке пришлось заменять пробел на плюсик.
"Процессор, быстро заменять пробел на плюсик, а то щас как выключу"
http://www.youtube.com/watch?v=RHaIjAk0X7Y
Pattern'ы надо избегать, а не использовать. Т.е. видя pattern нужно использовать какую-то технику, которая заменит повторяющийся код одной конструкцией.
(1) ФФ ---> Ф1, (2) для всех Ф1 ---> О != Ф1
Если создаёт, ФФ ---> ФФ => ФФ ---> О != ФФ, правило 2 нарушается
Если не создаёт, ФФ --X> ФФ => ФФ ---> О != ФФ, правило 2 не нарушается
Значит создавать не может. Парадокса вроде бы нет, но если "исключительно" заменить на "все возможные", парадокс точно будет.
CCCCombo!
Откроем викисловарь и посмотрим определение слова "зануда".
Зануда - надоедливый человек, тот, чьи действия вызывают тоску и раздражение.
Рассмотрим мои комментарии. Они полны радости, надежды и стремления к светлому будущему. Как они могут вызывать тоску?
Откроем Википедию и посмотрим, что там написано про тоску:
Тоска́ — отрицательно окрашенная эмоция, тяжёлое, гнетущее чувство[2]. Близкими чувствами являются грусть, уныние, тревога[2][3].
Как же полные радости комментарии могут вызывать отрицательно окрашенные эмоции?
Тоска отличается выраженным снижением настроения и ухудшением общего самочувствия.
То есть Вы, милейший, обвиняете меня практически в отравлении посетителей ГК своей мелкой твёрдой психозой? Но ведь это абсурд!
Пойдём далее, чьи действия вызывают тоску и раздражение. Как мои, направленные на мир во всём мире действия, могут вызывать чьё-то раздражение?
Нет, сэр, я не зануда.
> Если она создавать не может - то может, т.к. она удовлетворяет правилу
А это откуда следует?
Фабрика не создаёт экземпляры своего класса, но при этом создает исключительно такие фабрики, которые не могут создавать объекты своего класса. При этом связь развязывается. Условия, действующие на фабрики, создаваемые фабрикой фабрик могут быть уже любыми и не описывают фабрику фабрик.
P.S. противоречия, противореции...
class Factory
{
public function getInstance($class)
{
return new $class;
}
}
// Фабрика которая не может создавать объекты своего класса
class ExclusiveFactory extends Factory
{
public function getInstance($class)
{
if (is_a($class, static::class, true)) {
throw new Exception('Не могу создавать объект своего класса');
}
return parent::getInstance($class);
}
}
// Невозможная фабрика
class ImpossibleFactory extends Factory // или ExclusiveFactory?
{
public function getInstance($class)
{
// Все ок, но тогда я могу сам себя создавать, а это противоречие!
// Типо я должен тогда быть ExclusiveFactory
// ок если я ExclusiveFactory - то условие пройдет и я создам объект сво
его класса - противоречие
if (!is_a($class, 'ExclusiveFactory', true)) {
throw new Exception('Могу создавать только фабрики не могущие создать объект своего класса');
}
return parent::getInstance($class);
}
}
Короче, если наследуем просто Factory
(new ImpossibleFactory)->getInstance('ImpossibleFactory');
Будет ексепшн:
Могу создавать только фабрики не могущие создать объект своего класса
Так блин, ну? Не смогли же создать объект своего класса? Так какого фига?
Или если делаем ее ExclusiveFactory
тот же
(new ImpossibleFactory)->getInstance('ImpossibleFactory');
Выдаст второй ексепшн:
Не могу создавать объект своего класса
Хм... не можешь - ну ок, так тогда типо должна же была создать.
ФФ может создать объект своего класса? Нет. Значит среди того, что она может создать её самой нет и быть не может. Зато она может запиливать другие фабрики, которые не могут запилить себя. ВСЕ такие фабрики она запиливать не обязана по условию. Противоречия нет.
Вот если ты исправишь условие на "ФФ может создавать экземпляр ЛЮБОЙ фабрики, которая не может запилить оьъект своего класса" - будет противоречие.
А если потребовать "любую" - то, кажись, все таки будет противоречие.
Попробуйте [code]ваш код[/code]
Предварительный диагноз - использование дополнительного условия, в первом комментарии не озвученного (вот и Борманд про условие говорит):
Единственному деревенскому брадобрею приказали: «Брить всякого, кто сам не бреется, и не брить того, кто сам бреется». Кто побреет брадобрея?
↓ ↓ ↓
Единственная фабрика фабрик запрограммирована, чтобы: «Создавать все фабрики, которые не могут создавать объекты своего класса, и не создавать фабрики, которые могут создавать объекты своего класса». Кто создаст фабрику фабрик?
(вроде бы при такой формулировке парадокс будет)
А я пока беру таймаут на сон и раздумья над кодом.
Пойду смотреть доктора. Первого. В оригинале. Блин, я тоже задрот.
Дакимакуры с Аской нету, мульты смотрю относительно редко, в тусовке не участвую...