Задать вопрос
  • Как перевести проект на React (на проекте битрикс)?

    fo_otman
    @fo_otman
    Веб-разработчик
    Все верно человек выше отписал. Добавлю. Ваши шаблоны компонентов Битрикса должны отдавать исходные данные для последующей отрисовки страницы на стороне клиента. Я не знаком с React, но подозреваю, что данные он получает через json. Т.е. задача сводится к тому, что шаблон компонента Битрикса отдавал json, а React его понимал. Создайте новый шаблон сайта, без визуальных данных, и включайте его по GET-условию, например react=Y. И читайте комментарий выше.
    Ответ написан
    Комментировать
  • Как перевести проект на React (на проекте битрикс)?

    Но если мы будем переводить проект на реакт, то как мы будем писать php в нем?

    Что это вообще может значить? PHP у вас это server side, а React это клиентское приложение.... Блин, я даже не знаю что дальше спросить... вы PHP в браузере собрались исполнять или JS интерпритатором PHP?
    Это вот вопрос он лишен смысла чуть более чем полностью.

    Ведь синтаксис реакта ( jsx ) не предусматривает php.

    Да причем тут синтаксис? Среда исполнения не предусматривает php, а вы про синтаксис.

    И мне кажется, так просто взять за неделю и перевести проект на реакт не получится. Наверное будем частями переводить.

    Если это сайт среднего размера, то нужно заложить не неделю, а несколько месяцев.

    Т.е. получается одна часть проекта будет написана на реакте, а другая - нет? Это вообще как?

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

    У кого то есть подобный или близкий к этому опыт? Что посоветуете? Как грамотно перевести проект на реакт в таком случае?

    Выше написал:
    1 Сначала разрабатываете шаблон для одного раздела сайта на React, так как буд-то других разделов просто не существует.
    2 Пишите соотвествующий бэкенд который будет отдавать данные для этого вашего шаблона.
    3 Переводите этот раздел сайта на React.
    4 Эксплуатируете неделю, подчищая косяки.
    5 Выбираете еще один раздел сайта поменьше и переводите его аналогичным образом.
    6 В этом месте у вас уже должно быть понимание где вы наложали с архитектурой, какие накопились костыли, и в чем фундаментальные изъяны того что вы сделал. Тут вы должны остановиться и выкинуть всё что сделали раньше. Я не шучу - просто выкинуть и начать перерабатывать эти разделы с нуля...
    7 Теперь вы знаете что делать дальше.
    Ответ написан
    6 комментариев
  • Как выложить сайт на Laravel чтобы он открывался не на порту?

    Antonchik
    @Antonchik
    Программирую на HTML
    Все что смотрит в сеть запускается на каком-то порту, по умолчанию сайты запускают на порту 80, и по этому браузер по умолчанию запрашивает его, вы можете запустить сервер php на порту 80, но так делать не очень хорошо.

    На сервере сайты запускаются с помощью веб сервера + что-то, что обрабатывает php. Самым популярным решением для этого выступает nginx + php-fpm. Вы можете посмотреть как это настроить здесь к примеру
    Ответ написан
    Комментировать
  • Какую CMS выбрать для новостного игрового сайта в наше время?

    Sanes
    @Sanes

    я пишу сайты в основном сам, но в данный момент нет смысла и времени делать его с нуля

    Да ладно! Ну раз так, то composer, laravel и интеграция вёрстки вас не должны пугать.
    Я бы сделал на Modx, если не требуется продвинутая работа с профилями пользователя.
    Ответ написан
    3 комментария
  • Ajax или websocket для отправки сообщений?

    thecoder
    @thecoder
    Разработчик веб-приложений и сервисов.
    Websocket использую как индикатор, что "на сервере поменялось", пересылая минимум информации. С клиента наверх через ws ничего не отправляю. Клиент понимает, что надо дернуть API, имеет при себе сессионные ключи и шлет полноценный запрос. Иначе путаница с данными. У некоторых клиентов ws не работает и надо заменить на другой метод. Основная логика "дернуть API и поменять состояние клиента" остается неизменной.

    Подход имеет право на жизнь в личных кабинетах, списках заказов и т.п. не слишком быстро обновляемых данных. WS соединение висит, почти не потребляя трафика и отправляет числа для индикаторов кол-ва заказов.
    Ответ написан
    Комментировать
  • Не могу разобраться CMS, админка, и т.д. ??

    @Vaultboy84
    Не знаю, что тебе тут понаписали знатоки, про развитие, я по конкретной задаче. Вордпресс гагно, бери модикс, я в нем разобрался в два вечера. Шаблон режется элементарно, админится все элементарно. Все гораздо логичнее и нагляднее, чем в вордпресс, единственная проблема админка выглядит не очень.
    Ответ написан
    Комментировать
  • Не могу разобраться CMS, админка, и т.д. ??

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Блог и портфолио - это первые учебные проекты любого джуна, так что задача довольно простая на самом деле. Серверный язык какой-то знаешь?
    Ответ написан
    2 комментария
  • Не могу разобраться CMS, админка, и т.д. ??

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Насколько сложно выполнить мою задачу не прибегая к выше перечисленному, возможно ли это сделать на реакте, и сложно ли это для начинающего. И стоит ли самому вообще это делать, и что посоветуете учитывая мои джуновские знания?

    Сложно. Невозможно. Сложно. Не стоит.

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

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

    Если хочешь заниматься чисто фронтом, то про "сделать сайт" просто забудь, кроме статических сайтов-визиток.
    Если хочешь клепать говносайты для невзыскательных клиентов - учи вродпресс.
    Если хочешь делать нормальные сайты с фронтом на реакте - то кроме фронта учи пхп, mysql и ларавель. Но про "сделать сайт" придется на годик забыть
    Ответ написан
  • Как использовать async\await во Vue?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    А then то зачем?

    example: async() => {
      console.log('start');
      for (let i in this.orders) {
          await this.getOrder();
          console.log('loaded ' + i);
      }
      console.log('finish');
    }




    UPD

    Важно: в определении методов нельзя использовать стрелочную функцию, если вам нужен доступ к this. Освежите знания по стрелкам, контекстам.
    Ответ написан
    Комментировать
  • Как распарсить почту на nodejs?

    RomanDillerNsk
    @RomanDillerNsk Автор вопроса
    JavaScript
    Да силениум не нужен бот написан на puppeteer, просто слушать почту не нужно а нужно по событию заходить в ящик и вытаскивать письмо, imap норм тема, как реализую модуль напишу решение, может кому пригодится
    Ответ написан
    Комментировать
  • Как распарсить почту на nodejs?

    TTATPuOT
    @TTATPuOT
    https://code.patriotovsky.ru/
    Я использовал библиотеку: https://github.com/mscdex/node-imap - к почте подключается через IMAP протокол и читает всё, что в ней есть.
    Ответ написан
    3 комментария
  • Как сделать такой слайдер на Vue.js?

    @inFureal
    Когда вы гуглить научитесь?
    https://www.npmjs.com/package/vue-slider-component
    Ответ написан
    Комментировать
  • Битрикс CRM Получить ID контакта?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Есть как минимум 2 варианта (без прямых запросов в базу) как это сделать:

    1) Высокоуровневый (работает всегда). Метод с поддержкой обратной совместимости: CCrmContact::GetList (bxapi.ru/src/?id=183244)

    Применение (за основу взял код описанный Артем):

    /* @var array Список контактов */
    $arContacts = array();
    
    if ( \Bitrix\Main\Loader::IncludeModule('crm') )
    {
    	/* @var array Сортировка полученного списка контактов */
    	$arOrder  = array('ID' => 'DESC');
    
    	/* @var array Условия получаемого списка контактов */
    	$arFilter = array(
    		"NAME"      => "Имя",
    		"LAST_NAME" => "Фамилия",
    		'CHECK_PERMISSIONS' => 'N' // Данный ключ необходим для того чтобы получить всех пользоватей,
    								   // иначе, будет найден только если ответственным за него является тот,
    								   // под кем запускается скрипт в битриксе
    	);
    
    	/* @var array Получаемые поля для списка контактов */
    	$arSelect = array(
    		'ID'
    	);
    
    	// NOTE: Запрашивайте только необходимые поля
    	$res = CCrmContact::GetList( $arOrder, $arFilter, $arSelect );
    
    	while( $arContact = $res->fetch() )
    	{
    		$arContacts[ $arContact['ID'] ] = $arContact['ID'];
    	}
    }
    
    // Тут в $arContacts либо пустой массив, либо массив с ID контактами, которые соответствуют условию поиска


    2) Низкоуровневый DataMapper (новый подход d7)

    use \Bitrix\Main\Loader;
    use \Bitrix\Crm;
    
    /* @var array Список контактов */
    $arContacts = array();
    
    if ( Loader::IncludeModule('crm') )
    {
    
    	$resContacts = Crm\ContactTable::getList(array(
    		'select' => array('ID'),
    		'filter' => array(
    			"NAME"      => "Имя",
    			"LAST_NAME" => "Фамилия",
    		),
    		'order' => array('ID' => 'DESC')
    	));
    
    	while( $arContact = $resContacts->fetch() )
    	{
    		$arContacts[ $arContact['ID'] ] = $arContact['ID'];
    	}
    
    	/*
    	Начиная с 17 версии (вроде бы), можно делать так:
    	foreach( $resContacts as $arContact)
    	{
    		$arContacts[ $arContact['ID'] ] = $arContact['ID'];
    	}
    	вместо while цикла
    	*/
    }


    Преимущество первого подхода:
    - Работает всегда, как для новых, так и для старых проектов
    - Можно использовать уровни доступа

    Преимущество нового подхода:
    - Технологически универсален за счет d7 (можно в runtime прибавлять связи, доставать связанные сущности и т.п.)
    - В DataMapper есть технология кеширования, т.е. можно закешировать результат просто добавив в массив getList еще один ключик
    - Субъективно код легче воспринимается
    Ответ написан
    3 комментария
  • Почему появляется ошибка при изменении полей в процессе создания заказа Bitrix?

    @ulf_hednar
    Столкнулся с такой же ошибкой, долго кубатурил - что за фигня. Оказалось, что проблема была в то, что я установил
    несуществующий тип плательщика. Из примера, с которого копировал код: D
    $order->setPersonTypeId(1);// в скобках id плательщика

    Фактические же у меня было два типа плательщика - физик(id=3) и юрик(id=4)

    То есть апи пыталось достать свойство с id несуществующего плательщика и возвращало null
    Ответ написан
    Комментировать
  • Как распознать картинку с камеры на javascript и найти её в базе?

    @grinat
    Ну если сети, то тебе надо распознавать что за объекты в кадре https://github.com/tensorflow/models/blob/master/r... и в первую итерацию искать объекты с таким же числом и типом. Во вторую сравнивать векторы с позициями https://docs.scipy.org/doc/numpy/reference/generat... и ранжровоать по этому расстоянию.

    Хотя скорее всего это все надо, надо просто нормализировать изображения чтобы убрать искажения и потом искать похожие по цветовому профилю, по крайней мере опенсусрсные решения так делают - www.lire-project.net Пример https://github.com/soruly/trace.moe объяснение как работает https://go-talks.appspot.com/github.com/soruly/sli...
    Ответ написан
    2 комментария
  • Как распознать картинку с камеры на javascript и найти её в базе?

    @rPman
    Потому что задача не такая простая как хотелось бы, да, перцептивное хеширование и opencl верное направление, но ваша проблема именно в том что вы работаете с камерой а не типличными условиям и готовыми картинками.

    Камера - это повороты и перспективные искажения, проблемы с неравномерной яркостью и мерцанием освещения, инертностью матрицы и глюки алгоритмов пост обработки в смартфонах.

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

    @xfg
    Популярные NoSQL решения не используют джойны поскольку это в любом случае ведет к сетевым походам на различные шарды. Даже если это скрыто от пользователя. Соответственно в распределенной системе вы не получите джойнов как в Postgre. Более того, если пытаться шардировать Postgre, у вас и там возникнет проблема джойнов между шардами и от подобных джойнов придется отказаться.

    Проблема в том, что вы подходите к хранению данных в NoSQL также как в RDBS. Это неверно и для распределенных систем вполне себе допустимо хранение избыточных данных. Вы вполне например можете записывать новое сообщение на множество шардов, на шард где хранятся сообщения группы и на шарды с юзерами. Делать это можно по событию, которое генерируется при создании сообщения, далее оно попадает в rabbitmq, а оттуда подписчикам, которые запишут сообщение на нужные шарды.

    Таким образом, вы всегда сможете прочитать вместе с пользователем его новые сообщения с одного шарда. Делают по разному, основная мысль в том, чтобы максимально упростить сбор данных, для того или иного экрана приложения.

    Например в социальных сетях так советуют собирать ленту новостей. Система принимает пост от пользователя, а затем сервис в фоновом режиме раскладывает этот пост по всем пользователям (шардам), которые этот пост могут увидеть. Соответственно отображение ленты новостей становится тривиальной задачей. Также нужно быть готовым к тому, что в распределенных системах принята согласованность по событию вместо согласованности по транзакции. Проще говоря, не все пользователи увидят новый пост в своей ленте мгновенно, а спустя некоторое время и для больших проектов вроде facebook или amazon это ок. Из-за этого иногда на facebook можно обновлять ленту с переодичностью в секунду и в какой-то момент получить новый пост у которого дата добавления была 1 минуту назад.

    По базам данных можно выбрать любую популярную с поддержкой шардинга из коробки, которая больше нравится или с которой лучше знакомы. Знакомы с кассандрой, отлично используйте её, знаете монго, берите её. Не знаете ничего, почитайте плюсы и минусы обоих систем и решите для себя, что больше вам подходит.
    Ответ написан
    Комментировать
  • Какой PHP-микро-фреймворк взять для простенького REST API с авторизацией, и чтобы не из "большой тройки"?

    @xfg
    Сделал бы на Express.js, но там тяжелые запросы к БД ожидаются, а в этих случаях ноду вроде использовать не рекомендуют.

    Делайте. Вы неверно понимаете как работает node.js. Наоборот, если у вас тяжелые запросы, то node.js это то, что нужно. Ввод/вывод в node.js неблокирующий, это значит, что вместо ожидания ответа от сети или файловой системы, вы сможете обслуживать других клиентов.

    Не рекомендуют использовать node.js для сложных математических/физических и тому подобных расчетов требовательных к процессорному времени, что соответственно будет блокировать процесс пока процессор занят обсчитыванием этой задачи. Что вообще ни разу не про веб. И даже в таком случае, можно разделить такую задачу и выполнить её за несколько тиков или даже в дочернем процессе.
    Ответ написан
    1 комментарий
  • Как вы проектируете классы в ООП и их взаимодействие?

    @xfg
    В PHP сообществе вообще не развиты вопросы проектирования и архитектуры. Большинство лепит, что придумает. PHP изначально родился для примитивных homepage, вобрал в себя всю несерьезность, низкий порог входа и как следствие довольно слабое комьюнити, что часто становится объектом для шуток.

    Искать ответы на вопросы проектирования и архитектуры нужно в Java. Например там почти каждый с самых азов слышал о де факто ставшей стандартом слоистой архитектуре, она же layered architecture, она же n-tier architecture и видел изображение похожее на это
    main-qimg-91d7188a63a833488f92239028d0ae
    Из которой нужно понять, что всю программу можно разделить на несколько слоев и зависимость между слоями должна быть направлена сверху вниз, но не наоборот. Таким образом, например фреймворк может быть инкапсулирован в presentation слой и в любой момент безболезненно заменен на другой, так как другие слои ничего о нем не знают. Вся бизнес-логика инкапсулирована в domain слой в виде plain old java object, который не зависит вообще не от чего, а также предоставляет интерфейсы (репозиториев например) для инфраструктурного слоя и только в этом слое фактически и будет тот самый настоящий ООП, который все так упорно пытаются найти. Никакого стороннего кода в бизнес-логике нет, а соответственно весь сторонний код можно в любой момент поменять, не трогая бизнес-логику вообще.

    Для этого нужно открыть какую-нибудь книгу, где за руку проведут с нуля до конкретного приложения построенного с использованием этой архитектуры. Например Implementing domain-driven design, хоть эта книга и о DDD, но я уже говорил, что слоистая архитектура это де факто. С опытом, будет понятно, что в более простых приложениях количество слоев можно уменьшить, понимая на какой компромисс придется пойти, что иногда можно объединить domain и часть infrastructure и получить всем известный шаблон Active Record или вообще выбросить эти слои и получить шаблон transaction script, когда для решения просто не требуется что-то более сложное. Придет понимание, как можно начать с transaction script и в итоге постепенно катиться в сторону domain layer, через active record или не через active record если это когда-нибудь понадобится и тому подобное. Cтанет понятно, зачем, как и когда использовать патерны о которых написал Мартин Фаулер в своей книге Patterns of Enterprise Application Architecture.

    Полученные знания можно применить к любому языку. В том числе и PHP. Будет хорошо, если уровень этого сообщества хоть чуть-чуть будет подтягиваться к уровню Java, вместо того чтобы бомбить пятиуровневые ифы создавая такую цикломатическую сложность, что все метрики кода горят ярче красного.
    Ответ написан
    Комментировать
  • Какие недочеты вы скажете по коду?

    @xfg
    Высокая цикломатическая сложность подобного кода. Бизнес-логика смешивается с DOM. Практически весь код дублируется.

    Такой код сложно поддерживать. Сложно читать. Сложно тестировать. Это действительно слабо. Всё же мы пишем для людей, а не для компьютера. Написать сложный код, очень просто. Написать простой код, очень сложно.
    Ответ написан
    2 комментария