• Можно ли использовать die при валидации?

    Помимо уже перечисленных проблем, отметил бы ещё тестирование. В случае с PHPUnit, покрыть тестами код содержащий die или exit весьма затруднительно, так как такое завершение скрипта приведёт в том числе и к завершению скрипта теста.
    Ответ написан
    Комментировать
  • Битрикс отваливаются JS события на сайте?

    BornToFreeFall
    @BornToFreeFall
    Sielu ilman ihmistä
    Как уже отметил no_one_safe - использование "Asset::getInstance()->addJs" пригодно лишь в тех местах кода, которые не подвергаются всяческому кэшированию. Воспользуйтесь component_epilog.php вашего компонента. В самом же компоненте JS код подключается с помощью метода "addExternalJs". Ссылка на bitrix info Click
    Ответ написан
    Комментировать
  • Bitrix как же на нем правильно разрабатывать?

    @ZardoZAntony
    программист, сис. админ
    Делают везде как бог на душу положит. Тоже много где работал по битриксу.

    Стиль разработки, который задуман битрикс - это лучший варинат для разработчиков фулстеков или фронтендеров, которые хотя бы сдали экзамен по внедрению верстки. Он не грузит лишний js и css там где он не нужен. И чем больше проект, тем большее это благо.

    Вообще все проблемы людей, которые любят собирать всё в один js и один css файл - незнание архитектуры той CMS, с которой он работает. Тем более почти всегда это тупо верстальщик, который не знает куда пойдет его верстка, да и знать не хочет. Использовать BX он так же не умеет, что в итоге приводит к тому, что куча его скриптов и форм являются неудобными в применнии, т.к. есть гораздо более удобные нативные вещи. Это особо касается корзины и чекаута.

    Но скажу по секрету - webpack так же можно настроить, что он будет генерить шаблоны компонентов в нужных папках с стилями и js, а общие стили генерить в общие css и js. А фронтендер может по прежнему работать со своим postcss и ejs. Но да, чтобы настроить скрипты нужен спец по битриксу.

    У меня был большой проект на оптимизации, где я избавлялся от такой сборки и раскидывал все по компонентам. Почему? А как вам css+js - 27 мегабайт? Потом он со временем слез с битрикса, т.к. уже достаточно разросся.

    Какой вывод? За работу со сложной CMS берутся люди, которые не имею необходимых знаний по работе с ней, вот и начинают ругать битрикс. Нечего на зеркало пенять...
    Ответ написан
    5 комментариев
  • На чем лучше писать аналог Aliexpress?

    @caballero
    Программист
    человеку который не знает на чем писать рановато создавать аналоги алиэкспрес
    Ответ написан
    Комментировать
  • Почему не работает контактная форма (код php и html)?

    @66demon666
    Сетевой админ, АТС-админ
    Ну как минимум у вас в html и php имена полей формы не совпадают
    Ответ написан
    6 комментариев
  • Какое создать регулярное выражение?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Главное, чтобы было четыре секции между двоеточиями.

    Если это главное (и единственное) требование, то сами секции задаются как раз этим двоеточием. Поэтому банальное (но пока что ошибочное) рег. выражение:
    .*:.*:.*:.*
    Двоеточие в этом выражении соответствует двоеточию в исходной строке. Поэтому строка a:b:c будет не валидной - слишком мало секций. Выражение .* означает любое количество любых символов. Ошибка здесь в том, что любым символом также может быть двоеточие, поэтому это регулярное выражение разрешает более, чем 4 секции. Чтобы исправить это, нужно запретить символ двоеточия в последовательности любых символов. Выражение [^:] означает любой символ, кроме двоеточия:
    [^:]*:[^:]*:[^:]*:[^:]*

    Остался последний штрих. Пока что это рег. выражение всё ещё разрешает более одной секции, потому что поиск можно начинать с середины строки и заканчивать, не доходя до конца. Поэтому если подсунуть строку a:b:c:d:e:f выражение убедится, что подстрока a:b:c:d соответствует рег. выражению, а значит валидна. Чтобы исправить это, нужно указать, что проверку нужно начинать с самого начала строки и дойти до самого конца строки. То есть рассматривать строку целиком, а не по частям. Это делается с помощью указателей позиций. Символ ^ (в начале) означает начало строки, а символ $ (в конце) означает конец строки:
    ^[^:]*:[^:]*:[^:]*:[^:]*$

    Собственно, это и есть правильный ответ в общем виде на вопрос с главным требованием. Секции ровно четыре и они разделены двоеточием. В каждой секции двоеточие запрещено. Выражение [^:]* означает любое количество любых символов, кроме двоеточия, что нам и нужно.

    Однако данное выражение можно немного улучшить, в зависимости от дополнительных требований. Например, нас может не устроить, что для каждой секции считается валидным любое количество символов, даже нулевое. То есть строка a:b::c тоже будет валидной. Для этого нужно сменить квантификатор * на какой-либо другой. Например, можно сменить на +, который означает любое количество вхождений (символа) больше нуля, то есть 1 и более:
    ^[^:]+:[^:]+:[^:]+:[^:]+$

    Далее, может быть желательно выделить группы, чтобы рег. выражение не только проверяло исходную строку на соответствие шаблону ip:port:user:pass, но и извлекало эти самые переменные. Группы задаются просто скобками. Очевидно, что разделители и указатели позиций в группы не входят:
    ^([^:]+):([^:]+):([^:]+):([^:]+)$

    Далее можно вспомнить, что параметр port может содержать лишь арабские цифры. В регулярных выражениях \d (или [0-9]) означает любую цифру. Так что легко вносим улучшение:
    ^([^:]+):(\d+):([^:]+):([^:]+)$
    Хотя постойте-ка. Это ещё не всё с параметром port. Ведь абсолютное любое число, состоящее из цифр, нас не устроит. Как минимум, порт не может быть больше 65535, поэтому любое число выше считается ошибкой. В принципе, на данном этапе можно не заморачиваться и просто проигнорировать это требование, а реально проверить его позже кодом типа такого: $post < 65356, но в качестве примера можно всё же ограничить количество цифр от 2 до 5:
    ^([^:]+):(\d{2,5}):([^:]+):([^:]+)$
    Квантификатор {2,5} означает, что количество вхождений (цифр) должно быть не менее 2 и не более 5, иначе секция будет считаться не валидной, а значит и вся строка тоже.

    Далее, можем также сделать более строгое условие для параметра ip. Для простоты будем считать, что разрешён только IPv4, а IPv6 нельзя использовать. Тогда условием будет 4 цифры, разделённые точкой. Каждая цифра от 1 до 3 символов:
    \d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
    Ой, ошибочка вышла! Дело в том, что символ . является квантификатором. И чтобы рег. выражению сказать, что нам нужен сам символ точки, нужно его экранировать: \.
    В результате полностью рег. выражение получается таким:
    ^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{2,5}):([^:]+):([^:]+)$


    Да, получился монстр. Но нет предела совершенству.

    Правда, на этом этапе улучшать проверки уже не целесообразно. Далее уже кодом PHP можно проверить более строги условия. Например, сейчас в качестве ip будет валидной строка 300.400.500.600. Ведь всё сходится - 4 числа, разделённые точкой, в каждом от 1 до 3 цифр. Поэтому нужно либо более монструозное выражение лепить, либо кодом проверять, либо отдать на откуп сетевым ошибкам подключения - зависит от конкретного приложения и конкретной задачи.

    Рег. выражения не заточены на сравнение чисел, например. Чтобы проверить, что число находится в диапазоне от 0 до 255, придётся лепить что-то такое:
    (?:\d\d?|[0-1]\d\d|2[0-4]\d|25[0-5])
    То есть это вообще поразрядная проверка. Глупо. Проще это делать кодом, если это действительно нужно.

    На данном же этапе имеет смысл проверять лишь то, подо что заточены регулярные выражения. Например, можно ограничить класс символов, которые входят в user и в pass. Например, в пароле можно разрешить только латинские символы и цифры, а также ограничит длину: пароль не может быть меньше 6 и не может быть больше 32 символов:
    [a-z0-9]{6,32}
    (просто пример)

    И так далее в таком же духе. Как было сказано выше, прочие тонкости уже зависят от конкретной задачи.
    Ответ написан
    1 комментарий
  • Выгрузка из поиска как сделать?

    JaxAdam
    @JaxAdam
    Junior Full-Stack Developer
    ORDER BY, LIMIT
    Ответ написан
    Комментировать
  • Как сформировать список товаров из JSON и вывести на страницу через PHP?

    Awilum
    @Awilum
    Частный разработчик, ментор и преподаватель курсов
    тут все ответы https://www.php.net/
    Ответ написан
    Комментировать
  • Как сформировать список товаров из JSON и вывести на страницу через PHP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Фантастический вариант - изучить PHP, HTML и CSS, написать всё самостоятельно.
    Реалистичный вариант - заказать разработку на фрилансе.
    Ответ написан
    1 комментарий
  • Как правильно оформить метод?

    Тут всё просто
    В методе load нужно написать код для открытия файла, а в методе save для сохранения файла
    Ответ написан
    Комментировать
  • Книги по созданию сайтов на PHP?

    @posters
    Я тоже когда-то как вы размышлял. Только вот программирование это не то, чему можно научиться "пошагово". Можно конечно смотреть какую-нибудь серию видеоуроков, где автор лепит свой интернет-магазин, только вот в программировании главное это понимание. Программирование, это не какая-то механическая работа, вроде сборки шкафов по инструкции. Тут думать надо и тупо повторяя за кем-то, копируя куски кода из уроков, вы программированию не научитесь. У вас просто понимания того что вы делаете не возникнет. Потом нужно будет сделать что-то свое, не описанное в уроке, и вы тупо не будете знать как.
    Ответ написан
    1 комментарий
  • Как загрузить страницу со скроллом на определнный id на Nuxt/Vue?

    dicem
    @dicem Автор вопроса
    Решил эту проблему следующим способом, делаем в @/app/ файл router.scrollBehavior.js

    Далее там проверяю куда ведет роутер, если до нужного мне роута, то возвращаю в качестве position объект с селектором который мы передали в params роута.
    @/app/router.scrollBehavior.js
    export default function(to, from, savedPosition) {
    	const toName = to.params.name
    
    	if (to.name === 'menu-name') {
    		let position = { selector: `#${ toName }` }
    
    		return position
    	}
    }


    UPD: https://nuxtjs.org/docs/2.x/configuration-glossary...
    Ответ написан
    Комментировать
  • Как создать дополнительную страницу для товара?

    @PetrPo
    добавь свое правило question
    "SEF_URL_TEMPLATES" => array(
    	"sections"=>"",
    	"section"=>"section/#SECTION_CODE#/",
    	"element"=>"kkm/#ELEMENT_CODE#/",
    	"compare"=>"compare/",
    	"smart_filter"=>"section/#SECTION_CODE_PATH#/filter/#SMART_FILTER_PATH#/apply/",
    	"question" => "kkm/#ELEMENT_CODE#/question/"
    )


    Потом в шаблоне компонента каталога добавь файл question.php, в нем размести news-list с выводом нужной инфы
    Ответ написан
    Комментировать
  • Как определиться со стеком для торговой площадки(marketplace)?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    Главный вопрос: какой стек я знаю лучше всего из тех, которые имеют необходимый функционал.

    Всё остальное отстаёт по важности на порядки, потому что задача, в принципе, тривиальная. А вероятность того, что вы упрётесь в какие-то ограничения технологии во время разработки и эксплуатации, относительно мала. И она обычно увеличивается не в связи с тем, какие требования выдвигает проект, а из-за плохого знания инструментов.

    Количество посетителей почти не важно, потому что почти на любом стеке можно сделать как плохо, так и хорошо.
    Ответ написан
    Комментировать
  • Можно как-нибудь оптимизировать цикл?

    maddog670
    @maddog670
    $arr = array("hello" => "world", "how" => "are", "you" => "dude");
    echo str_replace(["&", "?"], '', http_build_query($arr));
    Ответ написан
    3 комментария
  • PHP-скрипт полностью не выполняется. Какая причина?

    @vism
    любая, да миллион причин от железа до софта и искать можете от пары часов до пары лет и не найти

    Поменяйте архитектуру, чтоб скрипт работал не 12 часов, а много мелких скриптов, которые будут добавлять пачки задач, выполняться, писать логи в базу

    через крон например
    Ответ написан
    5 комментариев
  • Как вывести PHP переменную?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Как вывести PHP переменную?

    Ждем вопросов как включить компьютер
    Ответ написан
    Комментировать
  • Можно ли разработать быстрый ИМ на Битрикс?

    Все там нормально работает, и 400 тыс тоже может потянуть.
    Вы должны понимать что любой сложный инструмент требует более высокого уровня программиста.
    В противном случае вероятность сделать качественное решение уменьшается.
    Дело не в композите.
    1. Грамотная архитектура технического дизайна рассчитывая его сразу под CSS Framework, тем самым уменьшая количество ненужных css
    2. Учет расположения элементов и способ сборки на Bitrix сайтов, а та-же минимизируя количество тяжелых запросов ( это к любому движку относится)
    3. Кеширование всего живого, в идиале на странице должно оставаться некешируемых 4 хита. - это очень важно!
    4. Грамотно оптимизированый сервер под 1c-bitrix - тоже важно!
    5. Проходите монитор качества перед сдачей проекта ( а желательно сообщить разработчикам о этом в тз ) (особенно пункт кастомизация ядра) !!!!! Иначе плакали все ваши обновления, а желательно отказаться от разработчиков которые туда лезут, что ко сожалению не так редко бывает.
    И будет вам счастье. Битрикс сложная система в нем много возможностей и инструментария, но и ошибок там можно наделать много.
    Не зря он господствует в России на е-комерц рынке.
    Ответ написан
  • Как привести Битрикс до нормального состояния?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Эм... давайте я отвечу (если не от всех, то хотя бы от лица себя и своих коллег) "битриксойдов" - никак.

    Поясню свой ответ: дело не в битриксе, а в подходе. Именно этого и не понимают многие разработчики, которые после Yii, Zend, Symfony и т.д. видят Bitrix.

    Во-первых, у продукта (я имею ввиду Битрикс24, и именно продукт, а не CMF/CMS) есть определенная парадигма: User First & Business insight.

    User First - это означает, что для реализации базовых вещей, например бизнес-процессы, пользователь с правами администратора должен иметь возможность сделать 80% работы без привлечения разработчика (читать - без привлечения, а я не без опыта/знаний/навыков/образования). Реальность такова, что Вы не сможете за столь короткий срок, сделать ВСЕ ТО ЖЕ САМОЕ, НО ЛУЧШЕ (я не сомневаюсь в Ваших способностях, но одному человеку за измеримые 1-5 лет это практически нереально).

    Business Insight - это означает, что в продукте уже заложена логика, а "кривизна результата" зачастую складывается из того, что Бизнес диктует свои условия (Продукт не для всех, но каждый пытается его использовать как хочет и как умеет). Как пример: купив зубную щетку Вы можете чистить ей зубы И/ИЛИ мыть машину, но согласитесь машину мыть неудобнее, но "бизнес решает не тратиться и на имеющуюся щетку нацепить тряпку побольше и ручку подлиннее".

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

    В-третьих, а давно ли Вы видели битрикс? Сейчас он движется в нужную сторону и, я Вас уверяю, если вы подключите к нему Yii/Silex и т.п., ничего кроме бОльшего "говнокода" Вы не получите. Я не говорю о том, что Вы плохой программист, но что будет после Вас? Вот уволитесь Вы, а это все достанется очередному бедолаге и ему с этим жить.
    Ответ написан
    4 комментария