• Почему перестал запускаться процесс PM2 для Laravel?

    @photosho Автор вопроса
    Побеждено. Решение:

    Поменял содержимое ecosystem.js:
    module.exports = {
      apps: [
        {
          name: 'LaravelApp',
          script: 'php artisan serve --host=0.0.0.0 --port=8000',
          exec_mode: 'fork',
          instances: 'max',
          wait_ready: true,
          max_restarts: 1,
          watch: true,
          error_file: 'log/err.log',
          out_file: 'log/out.log',
          log_file: 'log/combined.log',
          time: true,
          autorestart: true,
        }
      ]
    }

    То есть, поменял "exec_mode" на "fork" и убрал "interpreter: 'php'".

    Запустил процесс в pm2. Пока работает.
    Ответ написан
  • Почему не работают глобальные стили в Nuxt + Vue?

    @photosho Автор вопроса
    Проблема решена, всем спасибо. Оказалось, что даже глобальные scss он преобразует при использовании механизма css-модулей. То есть, добавлял к моему классу еще какой-то суффикс - в разделе css класс выводился как есть, а где-то в скомпилированном css в памяти он был с суффиксом и поэтому не работал.

    Лечится помещением глобальных классов в раздел "global":

    :global {
      .myclass {
        ...
      }
    }
    Ответ написан
  • Как загрузить товары из файла импорта независимо от того, были ли они изменены?

    @photosho Автор вопроса
    Нужно было один раз выполнить импорт всех товаров независимо от того, менялись они или нет, для заполнения определенного свойства значением, приходящим со склада. Так как такой импорт нужно было сделать только один раз, прибег к изменению файлов ядра (которые потом отменил). Если кому-нибудь будет нужно, объясняю, как сделал.

    /bitrix/modules/iblock/classes/general/cml2.php

    Строка 2973:

    if($bMatch && $this->use_crc)

    Здесь производится проверка контрольной суммы, а в "else" после этого блока - как раз действия, выполняемые, если товар был изменен. Нужно отключить этот блок, самый простой способ:

    if($bMatch && $this->use_crc && false)

    Тогда все товары будут импортироваться, даже если они не были изменены. Только после импорта изменения необходимо отменить - менять файлы ядра запрещено.
    Ответ написан
    Комментировать
  • Можно ли отключить блок "Дополнительные свойства" на странице заказа?

    @photosho Автор вопроса
    Разобрался. За это отвечает поле "PRODUCT_COLUMNS_HIDDEN" при подключении компонента "sale.order.ajax". В визуальном редакторе это, видимо, называется так:

    Свойства товаров отображаемые в свернутом виде в списке товаров:
    Ответ написан
    Комментировать
  • Как правильно масштабировать изображение при добавлении элемента инфоблока?

    @photosho Автор вопроса
    Проблему решил, не знаю, насколько правильным способом. Такое ощущение, что изменения в массиве "PREVIEW_PICTURE" в "arFields" события не влияют на изображение. Сделал так:

    $file = CFile::resizeImageGet(
      $arFields['PREVIEW_PICTURE_ID'],
      ['width' => 405, 'height' => 300],
      BX_RESIZE_IMAGE_PROPORTIONAL
    );
    
    $file['del'] = 'Y';
    
    $fields = [
      'PREVIEW_PICTURE' => CFile::makeFileArray($file['src'])
    ];
    
    $el = new CIBlockElement;
    $el->update($arFields['ID'], $fields);
    Ответ написан
  • Почему могут не отображаться Торговые предложения в списке товаров?

    @photosho Автор вопроса
    Проблема решена.

    =)
    Помимо прочего, нужно было установить параметр "PRODUCT_DISPLAY_MODE" (Схема отображения = Расширенный).
    Ответ написан
    Комментировать
  • Почему font-face отказывается загружать шрифт с другого сайта?

    @photosho Автор вопроса
    Пропустил в консоли такое сообщение:

    "Запрос из постороннего источника заблокирован. Причина: отсутствует заголовок CORS «Access-Control-Allow-Origin»". Решилось добавлением следующего правила в .htaccess сайта, откуда берется шрифт:

    Header set Access-Control-Allow-Origin 'http:site2.ru'


    А "site2.ru" - соответственно, сайт, который этот шрифт пытается установить.
    Ответ написан
    Комментировать
  • Почему не выводится список заказов в Личном кабинете?

    @photosho Автор вопроса
    Проблема решена. В файле "/catalog/controller/checkout/cartweb.php", в методе "save_cart" был закомментирован блок "if ($this->customer->isLogged()) {...}", в котором и устанавливалась эта переменная.
    Ответ написан
    Комментировать
  • Не могу найти указанный ключ формы?

    @photosho Автор вопроса
    Всем спасибо за полезные советы. Проблема в итоге была в другом: форма подключена при помощи разметки, в обход ModX.
    Ответ написан
    Комментировать
  • Как автоматически получить значение свойства Файл?

    @photosho Автор вопроса
    Можно автоматически обработать свойства в зависимости от типа:

    $props = $item->getProperties();
    
    foreach ($props as $key => $prop) {
        if ($prop['PROPERTY_TYPE'] == 'F')
            $result[$key] = CFile::getPath($prop['VALUE']);
    
        else $result[$key] = $prop['VALUE'];
    }
    Ответ написан
    Комментировать
  • Как организовать отправку цели Я.Метрики при регистрации пользователя?

    @photosho Автор вопроса
    Решил задачу при помощи блокировки отправки формы кнопкой "submit" и отправки ее самостоятельно посредством ajax-запроса. Хотя, вариант из комментариев к вопросу кажется более жизнеспособным, если нужны именно "реальные" пользователи, подтверждающие свою учетную запись, а не отслеживание самого процесса регистрации. Зависит от задачи и того, что хотят от вас специалисты по рекламе.

    Опишу здесь свой вариант решения.

    1. "/template_name/components/bitrix/system.auth.registration/template_name/template.php"

    Здесь поставил на "submit button" событие onclick:

    onclick = "registerSubmit(event);"

    2. В основном файле скрипта (или в любом другом, загружающемся на странице):

    function registerSubmit(event) {
    	event.preventDefault();
    
    	var form = jQuery(event.target).closest('.registration-form');
    
    	if (form.length) {
    		form.find('[name="USER_EMAIL"]').val(form.find('[name="USER_LOGIN"]').val());
    
    		BX.ajax.post(
    			form.attr('data-ajax'),
    			form.serialize(),
    			function(result) {
    				var parent;
    
    				result = jQuery(result);
    
    				if (result.attr('id') == 'bx_incl_area_1') {
    					yaCounter52684615.reachGoal('LK');
    					location.href = '';
    				}
    				else {
    					/*
    						Обработка действий в случае неудачной попытки регистрации,
    						в этом случае в result приходит разметка формы с текстом ошибок.
    					*/
    				}
    			}
    		);
    	}
    
    	return false;
    }


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

    form.find('[name="USER_EMAIL"]').val(form.find('[name="USER_LOGIN"]').val());


    Заполняет невидимый input "USER_EMAIL" данными из input'а "USER_LOGIN" (туда пользователь, как ни странно, вводит свой email-адрес). Она может быть не нужна в стандартном (или любом другом) шаблоне.

    Но суть остается прежней: получаем форму-родителя кнопки "submit", на которую нажали, смотрим, чтобы все необходимые для регистрации поля были заполнены, сериализуем форму и посылаем post-запросом на требуемый адрес (у меня этот адрес был записан в "data-ajax"). Если все прошло успешно - перезагружаем страницу, а если нет - выполняем другие действия. Например, заменяем содержимое родителя формы тем, что пришло от сервера. Код в этой секции намеренно удалил, потому что он-то уж точно был специфичным.

    Для определения, прошло ли все успешно, смотрим, что возвращает сервер в обоих случаях, ищем различия между двумя результатами и так проверяем. У меня при успешной регистрации сервер возвращает пустой "div" с "id = bx_incl_area_1".
    Ответ написан
    Комментировать
  • Как реализовать двухсоставное свойство инфоблока?

    @photosho Автор вопроса
    Комментарий Никита Ермиличев оказался полезен, но в данном вопросе помогла активация настройки "Выводить поле для описания значения" свойства инфоблока. Ссылка, таким образом, записывается в массив "DESCRIPTION" при считывании свойства.
    Ответ написан
    Комментировать
  • Где в компоненте "bitrix:catalog.comments" задается шаблон комментария?

    @photosho Автор вопроса
    Проблема была нестандартная, может быть, кому-нибудь пригодится ее описание. На сайте производится смена шаблона, и основным шаблоном установлен старый, тогда как для конкретной страницы со списком комментариев установлен новый шаблон.

    Внутри "catalog.comments/template/ajax.php" есть строки, подключающие компонент, загружающий комментарии посредством ajax-запроса:

    $APPLICATION->IncludeComponent(
    			'bitrix:catalog.comments',
    			'',
    			$commParams,
    			null,
    			array('HIDE_ICONS' => 'Y')
    		);


    Здесь не указано имя шаблона. Пытался указать, передав тот шаблон компонента, с которым я его подключаю, но Bitrix выводит сообщение: "Cannot find template 'name' of page ''" - вот этот пустой параметр "page" меня смутил. Подозрения оказались верными: видимо, если параметр "page" (или что это) не установлен, то шаблон компонента ищется в папке с шаблоном сайта, установленным по умолчанию.

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

    @photosho Автор вопроса
    Проблема была в том, что неверно задавалась стоимость заказа при его создании (заказ создавался вручную) - не учитывалось количество товара. В результате, значения полей "Сумма заказа" и "Оплата > Стоимость > Сумма к оплате" были разными.
    Ответ написан
    Комментировать
  • Почему не меняется флаг оплаты после успешной оплаты заказа?

    @photosho Автор вопроса
    Вопрос решен установкой галочки "Автоматически оплачивать заказ при получении успешного статуса оплаты" в настройках обработчика платежной системы.
    Ответ написан
    2 комментария
  • Почему не заполняется наименование контрагента при экспорте заказов из Bitrix?

    @photosho Автор вопроса
    Разобрался, следовало настроить Профили обмена: "Магазин > Настройки > Интеграция с 1С > Профили обмена".
    Ответ написан
    Комментировать
  • Как реализовать такую связь в Laravel?

    @photosho Автор вопроса
    Пока сделал следующим образом. В модель "Film" добавил метод "getLinks":

    public function getLinks() {
    		$query = \DB::table('LINKS')->select('id_b')->where('id_a', '=', $this->id);
    		$query = \DB::table('LINKS')->select('id_a')->where('id_b', '=', $this->id)
    			->union($query);
    		$ids = $query->get();
    		$buf = [];
    		foreach ($ids as $id) {
    			array_push($buf, $id->id_a);
    		}
    		$links = Film::whereIn('id', $buf)->get();
    		$this->links = $links;
    		return $this;
    	}


    Так произвожу выбор из базы данных:

    $object = Film::find($id)->getLinks();

    В общем, все работает правильно, но идеи по упрощению кода (а главное, - по оптимизации) все еще принимаются.
    Ответ написан
    Комментировать
  • Почему нет доступа к папке Sessions?

    @photosho Автор вопроса
    Проблема решена. Оказалось, что сайт сначала разрабатывался на одном компьютере, и потом был скопирован на другой, причем в файле "/bootstrap/cache/config.php" почему-то выводился путь к старой папке OpenServer'а: "D:\OpenServer" (в которой изначально создавался сайт), и по этой причине искомый файл не мог быть найден. Не знаю, что это за файл, но его удаление решило проблему.
    Ответ написан
    Комментировать
  • Как передать в свою директиву Blade значение переменной?

    @photosho Автор вопроса
    Пока решил проблему следующим кодом:

    Blade::directive('date', function($expression) {
      return '<?php echo Carbon\Carbon::ФУНКЦИЯ(' . $expression . '); ?>'
    });


    То есть, добавляю путь к классу прямо перед выводом функции. Буду признателен за комментарии к данному способу - является ли он правильным/оптимальным и не принесет ли лишних проблем.
    Ответ написан
    Комментировать
  • Как использовать расширение директив Blade в Laravel 5?

    @photosho Автор вопроса
    Вопрос решен. Проблема была, во-первых, в версии Laravel - насколько я понял, метод "directive" доступен только с версии 5.1 - обновление помогло. А, во-вторых, - в кешированных файлах на сервере. Очистка кеша (не путать с очисткой кеша в браузере) решила эту часть проблемы.
    Ответ написан
    Комментировать