Не покупайте решения Аспро

Итак, меня реально бомбит!

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

Кто-то скажет: "Ты просто не умеешь работать с решениями Aspro". Ну уж нет – разбираться в этой каше кода, честно, удовольствие ниже среднего. Понять, что и откуда подключается: где модули Aspro, где PHP напрямую, где стандартные механизмы Bitrix – это просто ад. Почему разработчики не собрали всё в нормальный компонент? Загадка. И, конечно, никто не объяснит, что им помешало.

Ведь в Битрикс можно спокойно писать компоненты любой сложности, делать к ним удобные шаблоны... Но нет. В Aspro, например, решили, что для стандартного bitrix:catalog вся их тяжеленная логика должна жить где-то между строк. Работает? Да, работает. Стоит ли этих денег? Сомнительно.
"Аспро: Премьер" стоит ~2000 евро вы получаете строго ограниченный шаблон, внести изменения в который сможет разве что избранный круг специалистов – и за дополнительную плату, само собой.

И, конечно, никакой гарантии, что обновления Aspro или самого Битрикса не похоронят все ваши доработки, никто не даст.

Не разубедил? Ну что ж, пробуйте – но потом не говорите, что вас не предупреждали...

Как загрузить файл runComponentAction

PHP
/**
 * Импортируем файл 
 * @param array $data
 * @param null|array $params
 * @return array
 */
public function importAction(array $data, ?array $params = []): array
{
   try {
           ... 
   } catch (\Throwable $th) {
      $this->addError(new Error($th->getMessage(), $th->getCode()));
   }
   return $file;
}
JS
const data = document.getElementById();
// data = 

BX.ajax.runComponentAction('company:sale.basket.detail', 'import', { 
   mode: 'ajax',
   data: Default,
})
?.then(response => {...})
.catch(response => {...})

Как скачать сгенерированный файл runComponentAction

PHP
/**
 * Экспортирует данные в файл
 * @param int $id
 * @param string $type
 * @param null|array $params
 * @return null|BFile
 */
public function exportAction(int $id, string $type, ?array $params = []): ?BFile
{
   try {
      $pFilename = \TEMP_DIR . '/' . 'item.xls';
      \file_put_contents($pFilename, $data);
      $arFile = \CFile::MakeFileArray($pFilename, false, true);
      $file = new BFile($arFile);
   } catch (\Throwable $th) {
      $this->addError(new Error($th->getMessage(), $th->getCode()));
   }
   return $file;
}
JS
BX.ajax.runComponentAction('company:sale.basket.detail', 'export', { 
   mode: 'ajax',
   data: {id, type},
   method: 'POST',
})
?.then(response => {
   if (response.status === 'success' && response.data?.url) {
     window.location.href = response.data.url;
   }
})
.catch(response => {...})

Как скачать файл runComponentAction

PHP
/**
 * Экспортирует данные в файл
 * @param int $id
 * @param string $type
 * @param null|array $params
 * @return null|BFile
 */
public function exportAction(int $id, string $type, ?array $params = []): ?BFile
{
   try {
      $file = \Bitrix\Main\Engine\Response\BFile::createByFileId(985);
   } catch (\Throwable $th) {
      $this->addError(new Error($th->getMessage(), $th->getCode()));
   }
   return $file;
}
JS
BX.ajax.runComponentAction('company:sale.basket.detail', 'export', { 
   mode: 'ajax',
   data: {id, type},
   method: 'POST',
})
?.then(response => {
   if (response.status === 'success' && response.data?.url) {
     window.location.href = response.data.url;
   }
})
.catch(response => {...})

Bitrix GetCurPage to getRequestedPageDirectory D7

Получить путь текущий страницы БЕЗ index.php
Старое ядро:
$APPLICATION->GetCurPage();
Новое ядро:
\Bitrix\Main\Context::getCurrent()->getRequest()->getRequestedPageDirectory();
Получить путь текущий страницы с index.php
Старое ядро:
$APPLICATION->GetCurPage(true);
Новое ядро:
\Bitrix\Main\Context::getCurrent()->getRequest()->getRequestedPage();
Страницы:1|2|3|4|5|...|7|След.