1. PHP / Говнокод #16613

    +153

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    if(!empty($this->aActions))
    			$sMenuItems = htmlspecialcharsbx(CAdminPopup::PhpToJavaScript($this->aActions));
    ?>
    <tr class="adm-list-table-row<?=(isset($this->aFeatures["footer"]) && $this->aFeatures["footer"] == true? ' footer':'')?><?=$this->bEditMode?' adm-table-row-active' : ''?>"<?=($sMenuItems <> ""? ' oncontextmenu="return '.$sMenuItems.';"':'');?><?=($sDefAction <> ""? ' ondblclick="'.$sDefAction.'"'.(!empty($sDefTitle)? ' title="'.GetMessage("admin_lib_list_double_click").' '.$sDefTitle.'"':''):'')?>>
    <?
    
    		if(count($this->pList->arActions)>0 || $this->pList->bCanBeEdited):
    			$check_id = RandString(5);
    ?>
    	<td class="adm-list-table-cell adm-list-table-checkbox adm-list-table-checkbox-hover<?=$this->bReadOnly? ' adm-list-table-checkbox-disabled':''?>"><input type="checkbox" class="adm-checkbox adm-designed-checkbox" name="ID[]" id="<?=$this->table_id."_".$this->id."_".$check_id;?>" value="<?=$this->id?>" autocomplete="off" title="<?=GetMessage("admin_lib_list_check")?>"<?=$this->bReadOnly? ' disabled="disabled"':''?><?=$this->bEditMode ? ' checked="checked" disabled="disabled"' : ''?> /><label class="adm-designed-checkbox-label adm-checkbox" for="<?=$this->table_id."_".$this->id."_".$check_id;?>"></label></td>
    <?
    		endif;
    
    		if($this->pList->bShowActions):
    			if(!empty($this->aActions)):
    ?>
    	<td class="adm-list-table-cell adm-list-table-popup-block" onclick="BX.adminList.ShowMenu(this.firstChild, this.parentNode.oncontextmenu(), this.parentNode);"><div class="adm-list-table-popup" title="<?=GetMessage("admin_lib_list_actions_title")?>"></div></td>
    <?
    			else:
    ?>
    	<td class="adm-list-table-cell"></td>
    <?
    			endif;
    		endif;

    bitrix

    Лапша PHP кода, с подливкой из HTML. Присутствуют специи из альтернативного синтаксиса оператора if для шаблонов

    Запостил: memclutter, 29 Августа 2014

    Комментарии (53) RSS

    • Вообще-то альтернативный синтаксис специально для таких одаренных как ты придумали, чтобы вы {} скобочки в верстке не использовали.

      У меня есть один такой одаренный, на работе, вечно вместо альтернативного синтаксиса в верстке использует фигурные скобки. Хочется ему голову лопатой отрубить уже.
      Ответить
    • Код безусловно говно собачье, его неудобно и больно поддерживать как верстуну, так и прогеру. В нем легко забыть закрыть скобочку, легко допустить вываливание незаэскепированного HTMLя, но к сожалению PHP именно так и работает. Единственное что тут не связано с пхп это вырвиглазные онклики. Это пиздец конечно полный, так писать.

      Боже, как прекрасно что в моем мире шаблонизаторы лаконичны, легко встраиваются в HTML, и сами экскейпирут данные, а JS вынесен в отдельный файл и там навешивается жукверей на элементы с определенным классом.
      Ответить
      • Это дерьмо потому и спрятано подальше от людских глаз в админке. Для public-сайта используются нормальные mvc-компоненты.
        Ответить
        • Правда? Тоесть вот так уже не пишут:
          <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
          <div class="search-form">
          <form action="<?=$arResult["FORM_ACTION"]?>">
              <?$APPLICATION->IncludeComponent(
                  "bitrix:search.suggest.input",
                  "",
                  array(
                      "NAME" => "q",
                      "VALUE" => "",
                      "INPUT_SIZE" => 15,
                      "DROPDOWN_SIZE" => 10,
                  ),
                  $component, array("HIDE_ICONS" => "Y")
              );?> <input name="s" type="submit" value="<?=GetMessage("BSF_T_SEARCH_BUTTON");?>" />
          </form>
          </div>

          ?:))
          Ответить
          • Я не вижу здесь ничего предосудительного. Шаблон компонента с вызовом компонента внутри. Вам не нравится hMVC?))
            Ответить
            • Где тут MVC ?)

              Я вижу тут ужасную шаблонизацию (даже этот ваш смарти и то приятнее), немного логики (die()), и HTML вокруг всего этого. Бедный верстун, который захочет этот код поправить.

              Но вообще я не собирался разводить флеймы на тему "почему это плохо". Это уже такое общее место, что мне не интересно) Можете спросить гостя)
              Ответить
              • Не надо смарти. Я с ним два года работал, это прослойка жрет лишнюю память и требует дополнительного освоения и умения прилаживать костыли (называемые гордо в смарти плагинами). Зачем нужен шаблонизатор на шаблонизаторе, кто мне ответит...

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

                Каждый день такое верстаю, рвотных позывов не наблюдаю.
                Ответить
                • Попробуйте для разнообразия сделать что-нибудь на руби или на дажнге с кем-нибудь из тамошних шаблонизаторов. И ощутите разницу. Может быть даже начнутся рвотные рефлексы от пхп;)
                  Ответить
                  • У меня скорее рвотные рефлексы начнутся еще от одного проекта под веб, чем от конкретно битрикса или пхп) Плюс, мне очень не нравится идеология одной точки входа для роутинга (насколько знаю, ror и django придерживаются именно этой идеологии). Мне нравится относительная свобода в выборе методологий при работе с сайтом.

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

                      Ставить сигнализации в такой квартире довольно трудно, равно как и указывать ее адрес) Но на вкус и цвет все фломастеры разные
                      Ответить
                      • Неверная аналогия. Точнее будет дворец или замок, в который можно войти так, как пожелает заказчик. Вам деньги за проект платятся не за ваше стремление к идеалу, а за удовлетворение потребностей заказчика. А единая точка входа - это неразумное ограничение.

                        Понятное дело, что если я делаю домик на колесах, я не буду использовать набор для строительства замка, а возьму тот же phalcon или kohana.
                        Ответить
                        • Удовлетворение заказчика никак несвязано с количеством точек входа.

                          Заказчику все равно каким образом у Вас файлы лежат на диске.

                          Единый фреймворк того же самого Django позволяет делает реюзабельные приложения, иснталлировать их в нужные пути, и приложения автоматически включаются во все жизненные циклы вроде синхронизации БД и проверки состояния.

                          На самом деле даже в PHP фреймворки пропагандируют единую точку входа: тот же Zend. Это довольно очевидная конструкция.

                          Не существует примуществ у создания файлика "guestbook.php" или "add_order.php" в document root вебсайта. Во всяком случае , я о таких требованиях не слышал.
                          Ответить
                          • Заказчику не все равно, когда речь идет о его проекте. Заказчики вообще самые разные бывают. Банально, заказчик может считать себя богом верстки и копирайтинга и хочет сам по фтп править html-код контента - ему там привычнее/их погромист под это заточен.

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

                            Как видите, есть по меньшей мере один фреймворк, который такую архитектуру единой точки входа не придерживается.

                            Это не требования, это реалии проектов. Банально, интеграция уже зарекомендовавшей себя гостевой книги в давно созданный проект.

                            Речь ведь не только о с нуля создаваемых красавцах на бутстрапе. Большую часть представляют собой уродцы прямиком из 90-00-х
                            Ответить
                            • Я так и не понял где же тут приимущество нескольких точек входа.

                              Заказчик может зайти по FTP и поправить шаблон (хотя я не понимаю как тогда гарантировать работу сайт: он же не будет ничерта версионировать). Но шаблоны не имеют никакого отношения к точкам входа. Это отдельные файлы:)
                              Ответить
                              • Если руки не крюки, то версионность даже при правках на продакшне можно реализовать)

                                Если контент лежит в конкретных файлах, скажем about.php, то причем тут шаблоны компонентов или сайта (пользуясь терминологией битрикса)?

                                Вобщем, это просто другая идеология, с этим нет смысла спорить, можно пользоваться ею при разработке, можно не пользоваться. Кто работает с битриксом - пользуется и не жалуется.

                                Все равно весь роутинг в админке представлен.
                                Ответить
                                • Как можно версионировать что-то что прямо на продакшене правится по ftp?

                                  Если контент это текст, то он точно так же будет лежать в шаблоне. Пусть он правит about.html, и все.

                                  Шаблон это просто файл на файловой системе. В базе их не хранят (а в битриксе хранят, да?).
                                  Ответить
                                  • Можно, просто надо быть хитрой жопой:) И контроль версий работает, и все синхронизировано (bare-репозиторий и stage/prod сервера)

                                    В битриксе из коробки контент находится между подключением header.php и footer.php в файле типа .php. Вот его обычно и правят через фтп или визуальный редактор битрикса.
                                    Ответить
                                    • Отличный способ:) Тогда проще настроить гит прямо у клиента, нет?

                                      )Тоесть битрикс сразу же ставит верстуна в позу когда есть понятия "header" и "footer". Как прекрасно! А вдруг у меня сайт в котором вместо "header" есть "left panel"? А вдруг я хочу в 9 страничках юзать общий шаблон а в 10й -- нет?

                                      Впрочем, битрикс тут не одинок. Так поступуюат все CMS. Потому-то фреймворки (zend, ruby, django) нравятся мне больше, чем CMSы (джумла, друпал итд)
                                      Ответить
                                      • Фреймворки не предоставляют панели администрирования, насколько я знаю. Там нет инфоблоков (из-за чего так любят битрикс заказчики).

                                        Вы можете вообще ничего не писать ни в header, ни в footer. Вобщем, вам лучше почитать на досуге описание, как в битриксе происходит процесс выполнения страницы, чем допрашивать меня в комментариях:)

                                        По поводу гита на сервере клиента - однозначно могу сказать, что есть ситуации, когда это невозможно. По различным соображениям (не моим конечно, я только за гит на каждом сервере))
                                        Ответить
                                        • >> Фреймворки не предоставляют панели администрирования, насколько я знаю.

                                          Ошибаетесь. Django предоставляет админку для CRUD весьма годную. Причем она сразу уже умеет WYSIWIG, например.

                                          RoR тоже есть ActiveAdmin, например.

                                          >>Вы можете вообще ничего не писать
                                          Я понимаю. Но сам факт внесения таких понятий как хедер и футер меня уже начинает напрягать.

                                          В общем речь тут шла не о CMS vs frameworks, тут все понятно (CMS готовый продукт со всеми ограничениями) а о точке входа
                                          Ответить
                                          • Но единая точка входа точно такое же ограничение, как хедер и футер. Кстати, с 15 версии битрикса вроде хотят ввести возможность подключения бутстрап файла, двигаются, так сказать, в сторону единой точки входа маленькими шажками.

                                            Просто битрикс это cmf, поэтому у него есть достоинства и недостатки сразу и тех, и других:)
                                            Ответить
                                            • Ну невозможность напрямую обращаться к памяти и железу это тоже ограничение. Только оно никому не мешает.

                                              Вот и тут я не вижу ни одной ситуации когда НЕ единая точка входа необходима.
                                              Ответить
                                  • > Как можно версионировать что-то что прямо на продакшене правится по ftp?
                                    index.php.1, index.php.2, ...

                                    > гит на продакшен сервере
                                    Поосторожней с этим, а то было полно прецедентов (даже какое-то исследование проводили, собирая статистику), когда apache/nginx превращали проект в опенсурсный из-за того, что папочка .git попала в раздаваемую ими директорию.
                                    Ответить
                                    • С гитом как раз проблем нет: можно ведь сделать так, чтобы htdocs была внутри репозитория, тогда папочка .git будет на уровень выше, т. е. за пределами области раздаваемого контента. То ли дело .svn в каждой поддиректории:
                                      http://habrahabr.ru/post/70330/

                                      Но в этом случае заводим под репозиторий отдельную директорию, а из неё на продакшен сервер делаем экспорт отдельной командой.
                                      Ответить
                                      • svn уже тоже три года как не создает папок.
                                        Ответить
                                        • показать все, что скрытоsvn уже типа года как не нужен.

                                          Гит всех убил
                                          Ответить
                                          • То, что он не нужен, не отменяет того факта, что всякие старые пердуны им до сих пор пользуются.
                                            Ответить
                                          • XP и IE8 уже год как не нужны. c++ builder 6.0 и досовский FoxPro уже лет 10 как не нужны...
                                            Ответить
                                            • Макось уже двадцать лет как не нужна.
                                              Ответить
                                              • git изначально не нужен.
                                                Ответить
                                                • > git изначально не нужен.

                                                  Git нужен, как минимум для разработки ядра.
                                                  Hg нужен для людей, которые не успевают попить кофе, пока выполняется git blame или хотят понаписать плагинов.

                                                  Вот уж кто точно не нужен - так это bazaar.
                                                  Ответить
                                          • хуйню несешь. svn живее всех живых я гарантирую это
                                            Ответить
                          • Голосую за единую точку входа. Не нужно думать обо всяких .htaccess и о том, что файловая система сервера покажет стриптиз случайному гостю. Из коробки получаем настраиваемые URL, а не всякие /cgi-bin/something.pl?parameter1=whatever&&&&&.

                            Единственное разумное применение отдельной точки входа (на мой взгляд) — это скрипт для исполнения задач по крону.
                            Ответить
                            • Настраиваемые УРЛ из коробки и в битриксе вообще-то есть. Если поставить любое из их стандартных решений, то вы там такого говна не увидите, вполне себе нормальный ЧПУ используется.

                              А вот использовать для крона отдельную точку входа - в любом случае эту точку придется закрыть htaccess, какой смысл?
                              Ответить
                            • А еще единая точка (в случае той же джанги) позволяет не хардкодить урлы.

                              Так как знание о том, что есть урл /foo/bar/spam храница в Urlconf, то можно просто сказать "вставить сюда урл по имени foo" и не хардкодить в шаблон "/foo/bar/spam.php".

                              Тут парадокс балба (или как там его?) в действии. Нужно сначала попробовать поработать с единой точкой входа, тогда станет понятно почему она лучше
                              Ответить
                              • Да хороша она, единая точка входа, я разве против. Я к тому, что имеется и другая альтернатива, которая дополняет единую точку входа. Не стоит сразу обзывать это говнокодом.
                                Ответить
                            • > Голосую за единую точку входа.
                              Голосую за подход, при котором мухи отдельно, а котлеты отдельно. Т.е. статика в одном каталоге, в котором ничего никогда не исполняется, а динамика - в другом, который никогда и ни при каких условиях не раздаётся веб-сервером. Старый добрый cgi так и работал. И это было хорошо. И все новомодные фреймворки, кроме пыховских, работают именно так.

                              Тогда никакие затыкания дыр через .htaccess или index.php в каждом каталоге просто не нужны. И никто не запустит какой-нибудь левый модуль системы.
                              Ответить
                              • > И все новомодные фреймворки, кроме пыховских, работают именно так.

                                Но ведь дефолтный ZF, который некоторые и за фреймворк-то не считают, хранит все исполняемые скрипты (кроме точки входа) за пределами htdocs. За это, кстати, его не любят пользователи шаред-хостингов, т. к. его придётся хитро переконфигурировать, чтобы смешать мух с котлетами.
                                Ответить
                              • тот же Yii так может делать.
                                Ответить
                • показать все, что скрытоа позывов пойти кому-то кости переломать?
                  Ответить
    • показать все, что скрытоКак назвать котенка? Нашла здесь kitten names for girls http://allcatsnames.com/popular-kitten-names-for-girls полный список имен для котов.
      Ответить
    • показать все, что скрытоSir Bobby Charlton made his Manchester Common debut 60 years ago today (Thursday), when he scored twice in a 4-2 supremacy all through Charlton Athletic at Old Trafford.
      Charlton joined United in 1953 as an England Schoolboys prodigy with a bulky notorious and was yearning to make his aim in Matt Busby's free-flowing team. With Tommy Taylor away with England on global job on a quarry against Northern Ireland, his big chance arrived, five days limited of his 19th birthday.
      The conspicuous footballing Knight spoke to MUTV some in unison a all the same ago about his bend in outstanding detail as he offered his recollections of the start of an incredible odyssey.
      "It was the longest term I'd in any case been below par the pitch injured," recalled Sir Bobby. "There was a lad called Keith Marsden who played centre-back in behalf of Manchester New zealand urban area Reserves and we both club the ball at the notwithstanding time and my ankle swelled up. Three weeks later, Sir Matt Busby asked me how I was.
      <a href=http://56b3a8a59c459ea6f4a55ef4140a8805.com>htt p://56b3a8a59c459ea6f4a55ef4140a8805.com</a>
      Ответить

    Добавить комментарий