Задать вопрос
  • Как вывести "правило работы с корзиной" в детальной карточке товара?

    @anton99zel Куратор тега 1С-Битрикс
    29а класс средней школы №7
    Скидку показывает, потому что передается правило, но сами правила не содержат данные о товарах.
    https://dev.1c-bitrix.ru/api_help/sale/classes/csa...
    Если нужно как то группировать товары со скидкой, то группируйте через свойства.
    Кроме того, правила корзины могут работать и без указания ID товаров. Например, через свойства.
    Можете помучать этот метод (крайне не рекомендуется)
    https://dev.1c-bitrix.ru/api_help/catalog/classes/...
    Ответ написан
    Комментировать
  • Попросили проверить код, на что смотреть нужно?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смотря зачем)). Я когда делаю Code Review критерии следующие:

    * Безопасность:
    - Каждый аргумент метода простого типа должен проверяться на тип в случае его проксирования и на граничные значения в случае обработки. Чуть что не так - бросается исключение. Если метод с кучкой аргументов на 80% состоит из поверки из аргументов - это вполне норм))
    - Никаких trigger_error, только исключения.
    - Исключения ДОЛЖНЫ быть человеко-понятны, всякие "Something went wrong" можно отдавать пользователю, но в лог должно попасть исключение со стектрейсом и человеко-понятным описанием, что же там пошло не так.
    - Каждый аргумент (объект) метода должен быть с тайпхинтингом на этот его класс, или интерфейс.
    - За eval как правило шлю на **й.
    - @ допускается только в безвыходных ситуациях, например проверка json_last_error.
    - Перед работой с БД - обязательная проверка данных.
    - Никаких == и !=. Со swtich - единственное исключение, по ситуации.
    - Если метод возвращает не только bool, а еще что-то - жесткая проверка с ===, или !== обязательна.
    - Никаких условий с присваиваниями внутри. while($row = ...) - тоже идет лесом.
    - Магические геттеры/сеттеры разрешаются только в безвыходных ситуациях, в остальном - запрещены.
    - Конкатенации в sql - только в безвыходных ситуациях.
    - Параметры в sql - ТОЛЬКО через плейсхолдеры.
    - Никаких глобальных переменных.
    - Даты в виде строки разрешаются только в шаблонах и в БД, в пхп коде сразу преобразуется в \DateTimeImmutable (в безвыходных ситуациях разрешено \DateTime)
    - Конечно зависит от проекта, но как приавло должно быть всего две точки входа: index.php для web и console(или как-то по другому назваться) - для консоли.

    * Кодстайл PSR-2 + PSR-5 как минимум, + еще куча более жестких требований (для начала все то что в PSR помечено как SHOULD - становится MUST)
    - В PhpStorm ни одна строчка не должна подсвечиваться (исключением является typo ошибки, например словарик не знает какой-то из аббревиатур, принятых в вашем проекте). При этом разрешается использовать /** @noinspection *** */ для безвыходных ситуаций.
    - Если кто-то говорит, что пишет в другом редакторе и у него не подсвечивается, на эти отговорки кладется ВОТ ТАКЕЕЕНЫЙ мужской половой **й и отправляется на доработку)).

    * Организация кода:
    - Никаких глобальных функций.
    - Классы без неймспейса разрешаются только в исключительно безвыходных ситуациях.

    * Тестируемость (в смысле простота тестирования) кода должна быть высокая.
    - Покрытие кода обязательно для всех возможных кейсов использования каждого публичного метода с моками зависимостей.

    * Принципы MVC:
    - Никаких обработок пользовательского ввода в моделях, от слова совсем.
    - Никаких ***ть запросов в БД из шаблонов.
    - Никаких верстки/js/css/sql-ин в контроллерах.
    - В моделях НИКАКОЙ МАГИИ, только приватные свойства + геттеры с сеттерами.
    - В моделях разрешено использовать метод save(при наличии такого разумеется) только в исключительных ситуациях. Во всех остальных - либо insert, либо update.

    * Принципы SOLD:
    - Никаких божественных объектов умеющих во все.
    - Если метод для внутреннего пользования - private, никаких public.
    - Статические методы разрешаются только в случае безвыходности.

    * Принцип DRY разрешено нарушать в случаях:
    - Явного разделения обязанностей
    - В тестах (каждый тест должен быть независимым, на сколько это возможно)

    * Работа с БД:
    - Запрос в цикле должен быть РЕАЛЬНО обоснован.
    - За ORDER BY RAND() - шлю на***й.
    - Поиск не по ключам (конечно если таблица НЕ на 5 строк) запрещен.
    - Поиск без LIMIT (опять же если таблица НЕ на 5 строк) запрещен.
    - SELECT * - запрещен.
    - Денормализация БД должна быть обоснована.
    - MyISAM не используется (так уж)) )
    - Множественные операции обязательно в транзакции, с откатом если чо пошло не так.
    - БД не должна содержать бизнес логики, только данные в целостном виде.
    - Не должно быть нецелесообразного дерганья БД там, где без этого можно обойтись.

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

    * О людях:
    - "Я привык писать так и буду дальше" - не вопрос, ревью пройдешь только когда поменяешь свое мнение.
    - "Я пишу в vim-е и мне так удобно" - здорово, код консолью я тоже в нем пишу)) но есть требования к коду, если в них не сможешь - не пройдешь ревью.
    - "Я скопировал этот страшный метод и поменял 2 строчки" - это конечно замечательно, но по блейму автор всего этого метода ты, так что давай без говняшек, хорошо?
    - "Оно же работает!" - вот эта фраза переводится примерно так: "да, я понимаю, что пишу полную хрень, но не могу писать нормально потому, что руки из жо", я правильно тебя понял?))
    - "У меня все работает!" - рад за тебя, а как на счет продакшна?
    - "Там все просто" - не используй слово "просто", от слова "совсем". Вот тебе кусок кода (первого попавшегося с сложной бизнес логикой), где там ошибка (не важно есть она, или нет)? Ты смотришь его уже 2 минуты, в чем проблема, там же все "просто"))

    * Всякое:
    ActiveRecord (это я вам как в прошлом фанат Yii говорю) - полное говно, примите за исходную. По факту у вас бесконтрольно по проекту гуляют модельки с подключением к БД. Не раз натыкался на то, что в тех же шаблонах вызывают save, или update (за такое надо сжигать).
    То, что используется Laravel - это печально((. Что бы выполнить требования приведенные выше, приходится "воевать" с фреймворком.

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

    UPD

    Формализировал данные критерии по ссылочке: https://github.com/index0h/php-conventions
    Ответ написан
    55 комментариев
  • Библиотека для оптимизации изображений?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    psliwa - хорошая, пользую достаточно часто.
    tinypng - нормальный вариант для блогов, с не сильно большим количеством фотографий, для больших фоток тоже норма но уже надо костыль, надо получать много Api ключей, и ставить счетчик, после каждых 500 картинок в месяц подставлять другой ключ
    kraken - не супер вариант, но там в платном варианте идет уже счет за вес картинок, а не количество 9$ за 2 гига не много, но результат у него не супер, часто для нормальной минимизации требуется по 2 - 3 прогона картинки
    Ответ написан
    Комментировать
  • Нужен ли для ИП расчетный счет?

    allard
    @allard
    Серийный программист
    Отвечу Дмитрию, который писал выше.
    В пруфе нет ни слова про то, что нельзя принимать деньги для ИП на счет физ.лица. Там написано что так можно делать, но на свой страх и риск. Риск, например, блокировка счетов при неуплате налогов, но это решается открытием отдельного счета и именно этот счет сообщать в налоговую. Там есть только упоминание о том, что банки своими внутренними правилами не разрешают это делать и ниже написано, что эти правила не закон и за их не соблюдение ничего не будет.

    Цитата: "Конечно, Инструкция ЦБ для предпринимателя не закон, и никакой ответственности за использование текущего счета не по назначению законодательство не предусматривает.
    Подробнее на Правовед.RU: https://pravoved.ru/question/310866/"

    Так что пользуйтесь счетом физ.лица как ИП без проблем. Сэкономите кучу денег.
    У налоговой никаких претензий не будет, проверено 4х летним опытом. А банков много, всегда можно поменять.

    И конечно, для всех переводов на ИП открывайте отдельный счет, что бы все документы в налоговую предоставлять с этого счета. Если вам друг перекинет долг, который брал на пиво =), на этот счет (открытый для ИП) как физлицо физлицу, то это тоже будет облагаться налогами, запаритесь доказывать что это не оплата за работу.
    Короче за счетами всегда следить нужно, что бы потом все нормально было. А что написано в банковском бланке при открытии счета, налоговую вообще не волнует.
    Ответ написан
    8 комментариев
  • Нужен ли для ИП расчетный счет?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    Давайте по порядку.
    1. ИП может не иметь расчетного счета. Но тогда вам придется заводить кассовый аппарат, чтобы у вас были БСО (бланки строгой отчетности), которые вы можете выписывать клиентам. Товарный чек с печатью не является БСО.
    2. Если же у вас р/с, то кассу можно не заводить. Принимаете безналичную оплату от клиентов (если клиент ЮЛ, то оплачивает через свой РС, если ФЛ, то платит в любом банке по квитанции.
    В плане отчетности второй вариант надежнее и точней, в конце года подчитали доходы, распечатали декларацию и сдали. Все по выпискам из банка, которые налоговая проверит легко.
    Также хочу отметить, что не имея РС заказчики ЮЛ будут менее охотно с вами работать, так как это доставляет определенные неудобства для небольших компаний, где бухгалтерию ведет 1-2 человека. В крупных конечно все равно, так такие БСО постоянно заносят и одним больше не страшно.
    Как тут предлагали получать оплату на счет ФЛ, вместо счета ИП. У ИП нет карточного счета. Карточный счет открывается только на ФЛ (за исключением специальных карт для снятия наличных, которые открываются банком к РС).
    Получается, вам лучше и удобней все же завести РС ) Это если кратко.
    Ответ написан
    5 комментариев
  • Как объединить в группы object manager и скрывать группу с помощью чекбокса?

    forgotten
    @forgotten
    Руководитель разработки API Яндекс.Карт
    1. Задать соответствующее свойство в properties, например, properties.group = 'vegetables' | 'fruit' | etc
    2. Фильтровать объекты с помощью метода setFilter
    https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/refe...
    Ответ написан
    Комментировать
  • Как вывести views через альтернативный шаблон (не через шаблон типа материала)?

    andead
    @andead
    друпал девелопер, фрилансер
    Во первых надо научить друпал темизировать отдельные view-mode — xandeadx.ru/blog/drupal/576

    Во вторых создать новый view-mode — xandeadx.ru/blog/drupal/735

    В третьх в настройках Views указать созданный view-mode — e73a4c3c5fbe4792889261126c051380.png
    Ответ написан
    Комментировать
  • Как реализовать рекурсивный запуск PHP на хостинге?

    @Dark_Dante
    Делал когда то через сокеты, которые вызывыют сам скрипт
    public function exec_script($url, $params = array()){
    		$parts = parse_url($url);
    	 
    		if (!$fp = fsockopen($parts['host'], isset($parts['port']) ? $parts['port'] : 80))
    		{
    			return false;
    		}
    	 
    		$data = http_build_query($params, '', '&');
    	 
    		fwrite($fp, "POST " . (!empty($parts['path']) ? $parts['path'] : '/') . " HTTP/1.1\r\n");
    		fwrite($fp, "Host: " . $parts['host'] . "\r\n");
    		fwrite($fp, "Content-Type: application/x-www-form-urlencoded\r\n");
    		fwrite($fp, "Content-Length: " . strlen($data) . "\r\n");
    		fwrite($fp, "Connection: Close\r\n\r\n");
    		fwrite($fp, $data);
    		fclose($fp);
    	 
    		return true;
    	}


    Ну а вызов был такой
    //теперь нам надо чекнуть ссылку на наличие в базе
    				$b=$this->checkBase($hash);
    				//если в базе такой страницы не существует
    				if($b==false){
    					$this->exec_script($addcache_url, array('hash'=>$hash, 'href'=>$href, 'parent'=>$content["id"]));
    						
    					
    				}
    Ответ написан
    Комментировать
  • Как сделать такую окантовку?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Захотелось сделать блок на фоне, чтобы между картинкой и описание тоже был просвет.
    И, если бы не было старых IE, то можно было бы применять только градиенты.
    Из-за них пришлось строить чуть более сложную схему, но и в IE8, пусть и с квадратными краями, но не страшно.
    Ответ написан
    Комментировать
  • Как сделать такую окантовку?

    Symphony
    @Symphony Куратор тега CSS
    css
    • :after :before
    • border-image css3
    • border-radius
    • background: linear-gradient css3

    Как пример: jsfiddle.net/f36r2dtw
    Ответ написан
    1 комментарий
  • Что изучать: Ruby или Node.js?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Берите ноду, на ней тоже уже все есть готовое в NPM, не меньше, чем на RoR, но не подсядьте только на "все из коробки", главное определиться для со стеком технологий и адхитектурой, это важнее, чем язык, сейчас разрабатывают больше даже на фреймворках, нежели на языках. Определитке задачи для себя, что Вы хотите решать на ноде, что писать, для чего использовать: обычные сайты или CMS, SPA-сайты сайты или SPA-приложения, Rich-приложения, адаптированные под мобильные или будете заниматься только backend и работать в команде с кем-то, кто будет писать frontend. Нужно выбирать все в комплексе, СУБД, фреймворк для браузера, серверную ОС, варианты хостинга. Я рекомендую такой стек: CentOS, Node.js, MongoDB / PostgreSQL, React. Какие ссылки советую:
    1. Моя статья на Хабре - habrahabr.ru/post/204958
    2. Мой ответ на вопрос по фреймворкам для ноды тут на Тостере - Подсоветуйте фреймворк для node?
    3. Видео-уроки по node.js - learn.javascript.ru/nodejs-screencast
    4. Про Impress - habrahabr.ru/post/247543
    5. Разнообразные ответы по поводу выбора языка - Актуальный язык программирования
    Ответ написан
    1 комментарий
  • С чего начать обучение для фриланса?

    kumaxim
    @kumaxim
    Web-программист
    И так, с чего начать обучение:
    1.Самый низкий порог вхождения у языка PHP. Начинайте именно с него
    2.Изучите популярные CMS: WP, DLE, Joomla и т.д. Очень много заказов есть типа "Создать сайт", причем экзотики в 2 из 3 проектах не нужно. Здесь минус в том, что школоты тут полно и цену они сбивают весьма сильно...
    3.Далее категория заказов "А можно ли сделать вот так". Сводится все это к разработке/переработке модулей на все тех же CMS. Нужно учить PHP + API этих самых CMS. Возьмите один движок и копайте по нему в эту область, не рвитесь сразу за всеми. Порог вхождения тут тоже не велик, но здесь больше голодные студенты обитают
    4.Когда перерастете уровень дополнений/модулей, переходите к фреймворкам. Сейчас самый популярный Yii. Фреймворк позволяет Вам делать какие-то уникальные приложения, которые достаточно тяжело реализовать на готовых системах. Здесь ценник по существеннее, чем в первых двух, т.к. школота в силу своих умственных способностей сюда влезть не может.

    Теперь расскажу как вообще этому обучаться на своем примере. Я делаю так:
    1.Открываю тоненькую книжечку по языку(листов 100, не более), смотрю на основы
    2.Делаю примеры из этой книжке в IDE/блокноте. Это дает мне определенную базу
    3.Далее у меня есть список из примерно 20 задач(любую методичку по программированию откройте), которые я всегда делаю на новом языке. Это позволяет мне "привыкнуть" к новому коду и начать изучать стандартную библиотеку языка
    4.Затем я начинаю брать низкобюджетные заказы на фрилансе по этому языку
    5.После этого начинаю учить самый популярный фреймворк языка, опять же на низкобюджетных проектах.
    6.Сделать с 12-15 проектов я могу уже браться за что-то более менее серьезное с почасовой оплатой на фултайме.

    Вот это мой путь. По срокам - базу я себе нарабатываю за 1,5-2 месяца, на это время у Вас должна быть какая-то "подушка".

    P.S. надеюсь помог. ))
    Ответ написан
    7 комментариев
  • Какие системы слежения версий есть для сайта и модулей на 3-5 человек?

    SilenceOfWinter
    @SilenceOfWinter
    та еще зажигалка...
    git (github.com) или svn
    Ответ написан
    Комментировать