Pull to refresh
3
0
Send message
кем бы ни был настоящий автор — его творения уже растащили
http://govnokod.ru/19969
http://govnokod.ru/19971
https://github.com/mpak2/mpak.su/blob/master/index.php#L15 о великий Ктулху, что это?
и это в ту же кучу
Вообще обожаю упоротые посты про самописные cms, особенно когда люди вместо того, чтоб взять и установить большую часть через composer долго, упорно и коряво делают свою реализацию, при этом забивая болт на PSR и юнит-тесты, смешивая запросы к базе или обертки над этим с логикой, в особо запущенных случаях не используют неймспейсы, и свято веруют, что такой подход вознаградит хорошей скоростью, быстротой разработки и тем, что запустить можно будет везде.
тогда уж
<c></c> 
— ссылко
function ПреобразоватьСтрокуВФорматПросмотра(Строка, ЗаменитьНа, ОбрезатьДо) {
	Строка	= Строка.split("<br>").join(ЗаменитьНа);
	if( Строка.length > ОбрезатьДо )
		Строка	= Строка.substr(0, ОбрезатьДо)+"...";
	return(Строка);
}

пресвятой Ктулху, я вообще не подозревал что так можно писать и что это будет работать. Чертовы 1с'ники
а если серьезно по теме топика — мне кажется читабельность на практике сильно страдает, вышеприведенный кусок вполне показателен
http://miryanka.ru/frame.js
теперь я знаю кто автор этого скрипта!
if [[ $D == *"bitrix"* ]]

теперь все ясно )
по поводу flush_vhosts.sh — ересь, если мне понадобится проксировать веб-сокет на определенный порт в одном из виртуальных хостов, то после добавления еще одного мне все перетрет и придется делать заново, т.к. скрипт «Очищает конфигурацию виртуальных хостов.». Не лучше ли сделать чтоб хосты добавлялись, а не перетирались старые?
нормальность определяется нормальной документацией, следованием стандартам (если не в курсе, есть к примеру psr-2).
В битриксе же тонны ужаса тянутся с момента его появления из глубин ада на свет для обратной совместимости, и лучше это никогда не станет, рано или поздно придет время выбирать — или поддерживать все, что написали ранее, или переписать все по человечески.
Но пока работают маркетологи, люди будут это хавать и даже защищать, а в сторону других вещей даже смотреть не будут. Меня один знакомый просил поправить мелочь в магазине на OpenCart, потому что его знакомый-битриксойд не смог разобраться даже в этом. Зато спец с опытом, в веб-разработке весьма долго.
Раз уж автор упомянул про код и привел один участок, то приведу то, что в стандартном шаблоне битрикса после установки
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Интернет-магазин \"Одежда\"");
?>
<h2>Лучшие коллекции</h2>
<?$APPLICATION->IncludeComponent("bitrix:catalog.top", "", array(
    "IBLOCK_TYPE_ID" => "catalog",
    "IBLOCK_ID" => "2",
    "ELEMENT_SORT_FIELD" => "name",
    "ELEMENT_SORT_ORDER" => "asc",
    "ELEMENT_SORT_FIELD2" => "name",
    "ELEMENT_SORT_ORDER2" => "asc",
    "HIDE_NOT_AVAILABLE" => "N",
    "ELEMENT_COUNT" => "8",
    "LINE_ELEMENT_COUNT" => "4",
    "PROPERTY_CODE" => array(0=>"MINIMUM_PRICE",1=>"MAXIMUM_PRICE",2=>"",),
    "OFFERS_FIELD_CODE" => array(0=>"NAME",1=>"",),
    "OFFERS_PROPERTY_CODE" => array(0=>"ARTNUMBER",1=>"COLOR_REF",2=>"SIZES_SHOES",3=>"SIZES_CLOTHES",4=>"MORE_PHOTO",5=>"",),
    "OFFERS_SORT_FIELD" => "sort",
    "OFFERS_SORT_ORDER" => "asc",
    "OFFERS_SORT_FIELD2" => "id",
    "OFFERS_SORT_ORDER2" => "desc",
    "OFFERS_LIMIT" => "0",
    "VIEW_MODE" => "SLIDER",
    "TEMPLATE_THEME" => "site",
    "PRODUCT_DISPLAY_MODE" => "Y",
    "ADD_PICT_PROP" => "MORE_PHOTO",
    "LABEL_PROP" => "NEWPRODUCT",
    "OFFER_ADD_PICT_PROP" => "MORE_PHOTO",
    "OFFER_TREE_PROPS" => array(0=>"COLOR_REF",1=>"SIZES_SHOES",2=>"SIZES_CLOTHES",),
    "SHOW_DISCOUNT_PERCENT" => "Y",
    "SHOW_OLD_PRICE" => "Y",
    "ROTATE_TIMER" => "30",
    "MESS_BTN_BUY" => "Купить",
    "MESS_BTN_ADD_TO_BASKET" => "В корзину",
    "MESS_BTN_DETAIL" => "Подробнее",
    "MESS_NOT_AVAILABLE" => "Нет в наличии",
    "SECTION_URL" => "",
    "DETAIL_URL" => "",
    "BASKET_URL" => "/personal/cart/",
    "ACTION_VARIABLE" => "action",
    "PRODUCT_ID_VARIABLE" => "id_slider",
    "PRODUCT_QUANTITY_VARIABLE" => "quantity",
    "PRODUCT_PROPS_VARIABLE" => "prop",
    "SECTION_ID_VARIABLE" => "SECTION_ID",
    "CACHE_TYPE" => "A",
    "CACHE_TIME" => "180",
    "CACHE_GROUPS" => "Y",
    "DISPLAY_COMPARE" => "N",
    "PRICE_CODE" => array(0=>"BASE",),
    "USE_PRICE_COUNT" => "N",
    "SHOW_PRICE_COUNT" => "1",
    "PRICE_VAT_INCLUDE" => "Y",
    "PRODUCT_PROPERTIES" => array(),
    "USE_PRODUCT_QUANTITY" => "Y",
    "CONVERT_CURRENCY" => "N",
    "OFFERS_CART_PROPERTIES" => array(0=>"ARTNUMBER",1=>"COLOR_REF",2=>"SIZES_SHOES",3=>"SIZES_CLOTHES",)
  ),
  false
);?>
<h2>Тренды сезона</h2>
<?$APPLICATION->IncludeComponent(
  "bitrix:catalog.top",
  "",
  Array(
    "IBLOCK_TYPE" => "catalog",
    "IBLOCK_ID" => "2",
    "VIEW_MODE" => "SECTION",
    "TEMPLATE_THEME" => "site",
    "PRODUCT_DISPLAY_MODE" => "Y",
    "ADD_PICT_PROP" => "MORE_PHOTO",
    "LABEL_PROP" => "NEWPRODUCT",
    "OFFER_ADD_PICT_PROP" => "MORE_PHOTO",
    "OFFER_TREE_PROPS" => array("COLOR_REF", "SIZES_SHOES", "SIZES_CLOTHES"),
    "SHOW_DISCOUNT_PERCENT" => "Y",
    "SHOW_OLD_PRICE" => "Y",
    "MESS_BTN_BUY" => "Купить",
    "MESS_BTN_ADD_TO_BASKET" => "В корзину",
    "MESS_BTN_DETAIL" => "Подробнее",
    "MESS_NOT_AVAILABLE" => "Нет в наличии",
    "ELEMENT_SORT_FIELD" => "sort",
    "ELEMENT_SORT_ORDER" => "asc",
    "ELEMENT_SORT_FIELD2" => "name",
    "ELEMENT_SORT_ORDER2" => "asc",
    "SECTION_URL" => "",
    "DETAIL_URL" => "",
    "BASKET_URL" => "/personal/cart/",
    "ACTION_VARIABLE" => "action",
    "PRODUCT_ID_VARIABLE" => "id_section",
    "PRODUCT_QUANTITY_VARIABLE" => "quantity",
    "PRODUCT_PROPS_VARIABLE" => "prop",
    "SECTION_ID_VARIABLE" => "SECTION_ID",
    "DISPLAY_COMPARE" => "N",
    "ELEMENT_COUNT" => "12",
    "LINE_ELEMENT_COUNT" => "4",
    "PROPERTY_CODE" => array("MINIMUM_PRICE", "MAXIMUM_PRICE"),
    "OFFERS_FIELD_CODE" => array("NAME"),
    "OFFERS_PROPERTY_CODE" => array("ARTNUMBER", "COLOR_REF", "SIZES_SHOES", "SIZES_CLOTHES", "MORE_PHOTO"),
    "OFFERS_SORT_FIELD" => "sort",
    "OFFERS_SORT_ORDER" => "asc",
    "OFFERS_SORT_FIELD2" => "id",
    "OFFERS_SORT_ORDER2" => "desc",
    "OFFERS_LIMIT" => "0",
    "PRICE_CODE" => array("BASE"),
    "USE_PRICE_COUNT" => "N",
    "SHOW_PRICE_COUNT" => "1",
    "PRICE_VAT_INCLUDE" => "Y",
    "PRODUCT_PROPERTIES" => array(),
    "USE_PRODUCT_QUANTITY" => "Y",
    "CACHE_TYPE" => "A",
    "CACHE_TIME" => "180",
    "CACHE_GROUPS" => "Y",
    "HIDE_NOT_AVAILABLE" => "N",
    "CONVERT_CURRENCY" => "N",
    "OFFERS_CART_PROPERTIES" => array("ARTNUMBER", "COLOR_REF", "SIZES_SHOES", "SIZES_CLOTHES")
  )
);?>
<?$APPLICATION->IncludeComponent("bitrix:sale.bestsellers", ".default", array(
    "HIDE_NOT_AVAILABLE" => "N",
    "SHOW_DISCOUNT_PERCENT" => "Y",
    "PRODUCT_SUBSCRIPTION" => "Y",
    "SHOW_NAME" => "Y",
    "SHOW_IMAGE" => "Y",
    "MESS_BTN_BUY" => "Купить",
    "MESS_BTN_DETAIL" => "Подробнее",
    "MESS_NOT_AVAILABLE" => "Нет в наличии",
    "MESS_BTN_SUBSCRIBE" => "Подписаться",
    "PAGE_ELEMENT_COUNT" => "4",
    "LINE_ELEMENT_COUNT" => "4",
    "TEMPLATE_THEME" => "site",
    "DETAIL_URL" => "",
    "AJAX_MODE" => "N",
    "AJAX_OPTION_JUMP" => "N",
    "AJAX_OPTION_STYLE" => "Y",
    "AJAX_OPTION_HISTORY" => "N",
    "CACHE_TYPE" => "A",
    "CACHE_TIME" => "86400",
    "BY" => "AMOUNT",
    "PERIOD" => "30",
    "FILTER" => array(
      0 => "CANCELED",
      1 => "ALLOW_DELIVERY",
      2 => "PAYED",
      3 => "DEDUCTED",
      4 => "N",
      5 => "P",
      6 => "F",
    ),
    "DISPLAY_COMPARE" => "N",
    "SHOW_OLD_PRICE" => "N",
    "PRICE_CODE" => array(
      0 => "BASE",
    ),
    "SHOW_PRICE_COUNT" => "1",
    "PRICE_VAT_INCLUDE" => "Y",
    "CONVERT_CURRENCY" => "N",
    "BASKET_URL" => "/personal/cart/",
    "ACTION_VARIABLE" => "action",
    "PRODUCT_ID_VARIABLE" => "id",
    "PRODUCT_QUANTITY_VARIABLE" => "quantity",
    "ADD_PROPERTIES_TO_BASKET" => "Y",
    "PRODUCT_PROPS_VARIABLE" => "prop",
    "PARTIAL_PRODUCT_PROPERTIES" => "N",
    "USE_PRODUCT_QUANTITY" => "N",
    "SHOW_PRODUCTS_2" => "Y",
    "CART_PROPERTIES_2" => array(
      0 => "BRAND_REF",
      1 => "NEWPRODUCT",
      2 => "SALELEADER",
      3 => "",
    ),
    "ADDITIONAL_PICT_PROP_2" => "MORE_PHOTO",
    "LABEL_PROP_2" => "SALELEADER",
    "CART_PROPERTIES_3" => array(
      0 => "COLOR_REF",
      1 => "SIZES_SHOES",
      2 => "SIZES_CLOTHES",
      3 => "",
    ),
    "ADDITIONAL_PICT_PROP_3" => "MORE_PHOTO",
    "OFFER_TREE_PROPS_3" => array(
      0 => "COLOR_REF",
      1 => "SIZES_SHOES",
      2 => "SIZES_CLOTHES",
    ),
    "AJAX_OPTION_ADDITIONAL" => ""
  )
);?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

да, детка, это так круто, современно и следует всем стандартам и принципам.
Ну а
Примеры кода из D7

Звучит как оправдание, типа «смотрите ребята, в битриксе есть кусок, при взгляде на который понятно, что он делает».
По вашей аналогии с машиной — посади водителя формлы 1 в запорожец — ему точно не понравится. Так и нормальным программистам не нравится битрикс. Как ни крути, запарожец феррари не обгонит
Если раннее не пользовались линуксом и переходите с винды, то выбирайте дружественные к пользователю дистрибутивы — Linux Mint, Ubuntu и т.п… Для экспериментов используйте VirtualBox — так если и поломаете внутри что-то, то потом откатите.
В комментариях выше правильно подсказали про почтовый сервер http://www.iredmail.org/, есть еще статья здесь
я конечно не фронтэндщик, но чем не мил Вам Angular?
Наверно с той же целью, что и https://cordova.apache.org/ или http://phonegap.com/ — имея rest api на стороне сайта можно с минимальными усилиями сделать и мобильное, и десктопное приложение для него, при этом использовать один и тот же код в разных местах. Производительность или возможности могут уступать нативным реализациям, но как средство прототипирования или если бюджет небольшой — вполне норм
тогда и на
$PDO->query("SELECT * FROM Test");

и на отстутствие phpdoc к функциям стоило бы. Просто глобальные переменные прям бросаются в глаза. А статью все же перечитайте — потратите немного на ее чтение, потом сэкономите кучу времени при работе с подобными задачами
 global $array;
    global $array_idx_lvl; //Индекс по level
    global $groups; 

2016 год на дворе, а вы все глобальные переменные используете.
и по поводу деревьев можете глянуть сюда — http://gsbelarus.com/pw/articles/post/derev-ia-v-sql/
в статье описаны способы, которыми можно Ваши проблемы решить на корню чтоб не городить лишнего
Статья о том какой подход для бизнеса будет лучшим по соотношению цена/качество

} else
                                view::error("Incorrect data type for: " . implode(', ', $wrong_types), 204);
                        } else
                            view::error("Missing parameters: " . implode(', ', $missing_parameters), 204);
                    } else
                        view::error("Method in developing.", 503);
                } else
                    view::error("The method '" . $action . "' does not exist.", 204);
            } else
                view::error("No params received.", 204);
        } else
            view::error("Method was not received.", 204);
    }

Цена — пачка роллтона на семерых?
Я уже писал — скупой платит дважды, пока джуниор не сможет хотя бы прочитать код библиотеки/фреймворка, то нечего его и подпускать сюда.
Если в управлении находится джуниор то через како то время он начинает просто путаться в своем же Yii коде

А кто рулит по этой части в проекте и строит архитектуру или хотя бы на салфетке в баре рисует что и как будет? Дайте ему маленький простой кусок, чтоб не путался. Справится — расширяйте круг его деятельности. А в таком коде после пары месяцев добавления функционала будут путаться все.
В каждом фреймворке есть свои подводные камни

А так же свои правила, структура и документация. Подобрать норм фреймворк под задачу тоже важно.
И если вы рассчитываете на то, что сторонний разработчик быстро въедет в проект — как раз популярные фреймворки очень полезны, т.к. многие и так знают их структуру или прочитают документацию и разберутся. Не могут разобраться — не стоит тогда и браться за такое
Однако мой код позволяет любому начинающему программисту, за минимальное время, развернуть свое API для мобильного или веб-приложения

Хорошо, но почему не используете пространства имен, psr? Уже 2016 год. Если бы дело происходило до появления всего этого — то да, было бы познавательно. А psr приучит писать новичков понятный для остальных код. Ладно, пусть он один работает, даже так — через полгода глянет и ужаснется всему этому.
Скажите, сколько джуниоров способны моментально интерпретировать современные лучшие практики в рабочий не забагованный проект?

Моментально мало кто сможет, потому и надо приучать не только писать свое, но и читать код библиотек, фреймворков и т.п. польза приведенного Вами кода — максимум показать идею, но не применять это в продакшне.
Да и скажите — сколько будут стоить услуги человека, который знаком с этими лучшими практиками не по наслышке.

Дешевле, чем выйдет исправлять баги после проекта, реализованного новичком. Да, обучаться нужно, но чтоб подобное не попадало в боевой проект нужен code review.
Я сам не люблю компромиссы, однако, особенно в кризис, я думаю — это уместно.

Скупой платит дважды — отдав такое новичку, придется после доплачивать за исправление возможных багов. Или когда настанет момент расширить немного функционал — стоимость возрастет, и с ростом проекта кто-то глянет, плюнет и напишет с нуля — выйдет быстрее, чем поддерживать подобное.
А если мыслить ближе к реальности — нечего джуниора к проектированию API подпускать, если только что-то очень-очень простое дать.
тогда еще сюда гляньте
http://symfony.com/doc/current/components/index.html
https://github.com/auraphp
каждый из компонентов по отдельности прост, простую апишку собрать будет очень просто
http://www.php-fig.org/psr/psr-2/
https://getcomposer.org/ — вот это примите как стандарт, 2016 год на дворе
Ну и все это безобразие быстро и просто устанавливается из сторонних компонентов. Не любите фреймворки — библиотек для всего что в голову ударит вагон и маленькая тележка, и все протестированые и четко делают то, зачем они созданы
$arrData =  array(
            'page' => $_POST['page_id'], // id страницы в mongo
            'time' => $time, // время написания комментария
            'name' => $_POST['name'], // имя написавшего
            'comment' => $_POST['comment'] // сам комментрарий
        );

В примере представлен алгоритм и в нём есть допущения, а именно отсутствие сортировки комментариев и её персистетности.

А еще нефильтрованные данные из $_POST, и header прямо в коде.
Посоветуйте нормальных (правильных) ресурсов по разработке на битриксе

http://symfony.com/ =)
это на случай если заказчик не будет доволен сборкой битрикса из коробки, по мне так кроме этих случаев его вообще не стоит использовать

Information

Rating
Does not participate
Registered
Activity