Бюджет: 1000 UAH Срок: 1 день
ответ по первой ошибке нагуглил тут:
https://www.prestashop.com/forums/topic/505618-notice-trying-to-get-property-of-non-object/
Старую версия самописного модуля поставили на 1,7,8,7
Всплыла ошибка при работе другого функционала
Notice: Trying to get property 'precision' of non-object in /classes/Context.php on line 498
Fatal error: Uncaught TypeError: Argument 1 passed to Notice: Trying to get property 'precision' of non-object in /sites/testsite.com/classes/Context.php on line 498
Fatal error: Uncaught TypeError: Argument 1 passed to PrestaShop\PrestaShop\Core\Localization\CLDR\ComputingPrecision::getPrecision() must be of the type int, null given, called in /sites/testsite.com/classes/Context.php on line 498 and defined in /sites/ikrinka.lv/src/Core/Localization/CLDR/ComputingPrecision.php:41
Stack trace:
#0 /sites/testsite.com/classes/Context.php(498): PrestaShop\PrestaShop\Core\Localization\CLDR\ComputingPrecision->getPrecision(NULL)
#1 /sites/testsite.com/classes/order/Order.php(614): ContextCore->getComputingPrecision()
#2 /sites/testsite.com/classes/order/Order.php(667): OrderCore->setProductPrices(Array)
#3 /sites/testsite.com/modules/dg_productlot/dg_productlot.php(121): OrderCore->getProducts()
#4 /sites/testsite.com/modules/dg_productlot/dg_productlot.php(279): Dg_ProductLot->getOrderProducts(20)
#5 /sites/testsite.com/classes/Hook.php(1007): Dg_ProductLot->hookActionOrderStatusUpdate(Array)
#6 /sites/testsite.com/classes/Hook.php(431): HookCore::coreCallHook(Object(Dg_ProductLot), 'hookActionOrder...', in /sites/testsite.com/src/Core/Localization/CLDR/ComputingPrecision.php on line 41
После удаления модуля из хука hookActionOrderStatusUpdate работе другого функционала возобновляется
Код модуля в для этого хука
public function hookActionOrderStatusUpdate($params)
{
$products_with_lots = ModuleTools::getProductsWithLots();
$newOrderStatus = $params['newOrderStatus'];
$id_order = $params['id_order'];
if ($newOrderStatus->id == ConfPL::getConf('STATUS_PROCESS_BUY')
&& !$this->hasOrderStateInOrder($id_order, (int)ConfPL::getConf('STATUS_PROCESS_BUY'))) {
foreach ($this->getOrderProducts($id_order) as $product) {
if (!Pack::isPack($product['product_id'])) {
if (!in_array($product['product_id'], $products_with_lots)) {
continue;
}
$this->processBuyProduct($product, $product['product_quantity']);
} else {
/**
* var Product[] $items
*/
$items = Pack::getItems($product['product_id'], $this->context->language->id);
if (is_array($items) && count($items)) {
foreach ($items as $item) {
$quantity = (int)$product['product_quantity'] * (int)$item->pack_quantity;
$prod = array(
'id_order_detail' => (int)$product['id_order_detail'],
'product_id' => (int)$item->id,
'product_attribute_id' => (int)$item->id_pack_product_attribute,
'product_quantity' => $quantity,
'id_order' => (int)$product['id_order']
);
$this->processBuyProduct($prod, $prod['product_quantity']);
}
}
}
}
} else if ($newOrderStatus->id == ConfPL::getConf('STATUS_REFUND')
&& !$this->hasOrderStateInOrder($id_order, (int)ConfPL::getConf('STATUS_REFUND'))) {
foreach ($this->getOrderProducts($id_order) as $product) {
if (!in_array($product['id_product'], $products_with_lots)) {
continue;
}
$this->processRefundProduct($product);
}
} else {
foreach ($this->getOrderProducts($id_order) as $product) {
if (!in_array($product['id_product'], $products_with_lots)) {
continue;
}
//$this->processBuyProduct($product, $product['product_quantity']);
}
}
$order = new Order($id_order);
$this->updateQuantityProductsByOrder($order);
}
в классе /classes/Context.php такой код (жирным строка 498)
/*** Returns the computing precision according to the current currency return int */
public function getComputingPrecision()
{ if ($this->priceComputingPrecision === null) {
$computingPrecision = new ComputingPrecision();
$this->priceComputingPrecision = $computingPrecision->getPrecision($this->currency->precision);
}
return $this->priceComputingPrecision;
}
и в /Core/Localization/CLDR/ComputingPrecision.php
public function getPrecision(int $displayPrecision) (41строка)
{
// the MULTIPLIER attribute is set to 1 for now, so that it matches display precision
$computingPrecision = $displayPrecision * self::MULTIPLIER;
return ($computingPrecision < self::MINIMAL_VALUE) ? self::MINIMAL_VALUE : $computingPrecision;
}после
Возможно в самом модуле как-то прописать значение этого параметра задав ему константу в функции для хука?
Бюджет: 1000 UAH Срок: 1 день
ответ по первой ошибке нагуглил тут:
https://www.prestashop.com/forums/topic/505618-notice-trying-to-get-property-of-non-object/
После смены версии PHP с 7.0 на 7.4 на сайте OpenCart немного съехали два элемента: меню на главной странице и поля в оформлении заказа.
Хочу бот для Телеграмма. Загрузка диалогов. С помощью ИИ проверка на потенциальную ложь. Сайт с расширенными возможностями. Регистрация, апи, статистика и т д .
Необходимо мигрировать интернет-магазин Opencart с PHP 7.4 на PHP 8.x. В настоящее время стоит ядро v 3.0.3.8. Читаем, что скорее всего придется мигрировать и ядро на версию 4.0 и вроде сложностей не должно быть... Функционал в основном кастомный, также есть Simple, OCFilter, Нова пошта. Ждем рекомендации и ориентировочную цену. В идеале, кто уже проводил подобную работу.
Необходимо выполнить обновление, перенос и настройку Laravel-проектов на новый сервер с обеспечением стабильной работы, безопасности, защиты от эксплойтов и корректной работы всех сервисов после миграции. 1. Основные задачи Подготовить новый сервер к работе. Перенести файлы проектов, базы данных, конфигурации и cron-задачи. Обновить серверное программное обеспечение. Настроить безопасное окружение для Laravel. Проверить совместимость PHP, Laravel, Composer-пакетов и зависимостей. Обеспечить защиту от известных эксплойтов, вредоносных запросов и несанкционированного доступа. Настроить SSL-сертификаты. Проверить работоспособность сайтов после переноса. 2. Перенос Laravel-проектов Для каждого проекта необходимо: Перенести файлы проекта. Перенести базу данных. Перенести .env конфигурацию. Настроить права доступа к директориям: storage bootstrap/cache Проверить работу: главной страницы; админ-панели; авторизации; форм; API; загрузки файлов; email-отправки; cron-задач; queue workers.3. Безопасность и защита Необходимо реализовать базовый и прикладной уровень защиты: закрыть root-доступ по SSH; настроить SSH-доступ только по ключам; изменить стандартный SSH-порт, если нужно; настроить firewall; разрешить только необходимые порты; установить Fail2Ban; скрыть служебные версии Nginx/Apache/PHP; запретить доступ к .env, .git, backup-файлам, log-файлам; настроить правильные file permissions; проверить проекты на наличие вредоносных файлов; проверить Composer-пакеты на известные уязвимости; обновить зависимости, если это не ломает функционал; настроить защиту от SQL injection, XSS, CSRF и path traversal; проверить правильность Laravel APP_ENV и APP_DEBUG; установить APP_DEBUG=false на production; настроить rate limiting для критических endpoint-ов; проверить доступы к storage/uploads; настроить защиту от выполнения PHP в upload-директориях; проверить права доступа к админ-панелям. 4. SSL и домены Необходимо: Установить SSL-сертификаты. Настроить автоматическое обновление SSL. Включить редирект с HTTP на HTTPS. Проверить корректную работу сайтов через HTTPS. 5. Резервное копирование Необходимо настроить backup: файлов проектов; баз данных; .env файлов; uploaded media; cron-конфигураций; Nginx/Apache конфигураций. Backup должен выполняться автоматически по расписанию. Желательно хранить копии отдельно от основного сервера. 6. Проверка после переноса После миграции необходимо проверить: отсутствие 500/403/404 ошибок; отсутствие критических ошибок в Laravel logs. 9. Результат выполнения После завершения работ должно быть: Laravel-проекты успешно перенесены на новый сервер; сайты работают стабильно; SSL настроен; сервер защищен базовыми security-настройками; доступы к критическим файлам закрыты; backup настроен; cron и queues работают; старый сервер можно отключить после финальной проверки.
Разработка двух специализированных сайтов по продаже запчастейОбщая информация Необходимо разработать два специализированных сайта: Запчасти для квадроциклов, UTV, SSV и другой подобной техники. Запчасти для специальной техники. Существующий сайт компании: https://kiaparts.com.ua/ Новые проекты не должны быть копией существующего сайта. Необходимо предложить современное решение с акцентом на SEO, скорость работы, удобство для клиентов и менеджеров, а также возможность дальнейшего развития и масштабирования.Основная цель проекта Создать не просто интернет-магазин, а платформу для продажи запчастей, которая будет: хорошо индексироваться Google; привлекать органический трафик; удобно наполняться менеджерами; поддерживать большие каталоги товаров; легко масштабироваться в будущем. Для меня важнее получить правильную архитектуру и фундамент проекта, чем большое количество функций в первой версии.Архитектура проекта Необходимо два отдельных сайта для клиентов. При этом желательно, чтобы они были построены на единой платформе: одна административная панель; общий функционал; одна или связанные базы данных; отдельные домены; отдельное наполнение; возможность различного дизайна и оформления для каждого проекта. То есть фактически два отдельных сайта для клиента, но одна система управления для компании. Преимуществом будет модульная архитектура, которая позволит в будущем запускать новые проекты на этой самой платформе.SEO (один из главных приоритетов) Главная задача сайта не только продавать товар, а и получать максимальную органику из Google. Для каждой запчасти должна создаваться отдельная страница товара с собственной URL-адресой. К задаче прилагается пример существующей страницы товара, которая демонстрирует общий принцип наполнения SEO-информацией. Для каждого товара должна быть возможность добавлять: номер детали; OEM номер; кросс-номера; аналоги; бренд; название; альтернативные названия; характеристики; фото; описание; PDF-файлы; список применений; список моделей техники. Основная цель: Чтобы одна запчасть могла получать трафик по десяткам различных поисковых запросов: OEM номер; кросс-номер; аналог; название; бренд; модель техники.Важно относительно структуры данных Не хочу, чтобы менеджеры вручную писали большие тексты для каждой страницы. Желательно реализовать структурированную систему данных: Товар → OEM номер → Кросс-номера → Аналоги → Применения → Модели техники → SEO страница То есть менеджер заполняет информацию один раз, а система использует её для: SEO; поиска; перелинковки; фильтров; аналогов.Каталог и поиск Необходимо реализовать поиск: по номеру; по части номера; по OEM номеру; по кросс-номеру; по названию; по бренду. Желательно: автоподсказки; быстрый поиск; поиск аналогов; быстрая работа даже при большом каталоге.Импорт и обновление товаров Обязательно: импорт Excel; импорт CSV; экспорт данных; массовое обновление цен; массовое обновление остатков; массовое обновление описаний; массовое обновление фотографий; массовое обновление SEO-данных.Складской учет Необходимо реализовать: несколько складов; отображение наличия; резервирование товаров; синхронизацию остатков. В перспективе необходима возможность синхронизации со старым основным сайтом и другими проектами компании.Безопасность Необходимо предусмотреть: защиту административной панели; двухфакторную авторизацию; разграничение прав доступа; журнал действий пользователей; защиту от типичных атак; защиту API и интеграций.Резервное копирование Необходимо реализовать: автоматические дампы базы данных; автоматическое резервирование файлов; резервирование фотографий; резервирование документов; автоматическое сохранение копий в облако (Google Drive, AWS, Backblaze или аналогичные сервисы); возможность быстрого восстановления после сбоя или взлома.Дальнейшее развитие На первом этапе реализация ниже перечисленного функционала не является обязательной. Но архитектура должна позволять его дальнейшее внедрение без необходимости создания нового сайта. В будущем могут быть реализованы: AI-поиск по каталогу; AI-генерация описаний товаров; AI-генерация SEO-контента; автоматический поиск аналогов; интеграция с CRM; интеграция с поставщиками через API; автоматизация работы менеджеров; аналитика продаж; B2B кабинеты клиентов; маркетинговые инструменты. Поэтому важно, чтобы архитектура была готова к дальнейшему развитию.Примеры сайтов Нравятся по структуре, логике и удобству: Chrysler.com.ua Secoparts.net Comtac.parts RockAuto.com Не нужно копировать дизайн этих сайтов. Они приведены как примеры удобной структуры каталога, поиска и подачи информации.Платформа Допускается использование OpenCart, WordPress/WooCommerce или других платформ. Главные требования: хорошая SEO-архитектура; быстрая работа; возможность масштабирования; наличие API; возможность дальнейшего развития. Прошу обосновать выбор платформы и объяснить перспективы развития проекта на ней.Бюджет Ориентировочный бюджет первого этапа: 3 000 – 7 000 USD за весь проект (два сайта на единой платформе). Бюджет может быть пересмотрен после обсуждения архитектуры и этапов реализации. Готов рассматривать поэтапную реализацию, но для запуска желательно более срочно реализовать часть. Важно получить правильную архитектуру и качественный фундамент для дальнейшего развития, чем максимальное количество функций в первой версии.От исполнителя ожидаю предложение архитектуры; рекомендацию платформы; примеры аналогичных работ; ориентировочный бюджет; ориентировочные сроки; видение дальнейшего развития проекта. Большим плюсом будет опыт создания каталогов автозапчастей, магазинов с поиском по OEM-номерам и кросс-номерам, а также проектов с большим каталогом товаров. также просьба к заявке желательно добавить короткое описание того, как именно вы видите SEO-архитектуру проекта и каким образом будет обеспечиваться органический рост каталога. Фото добавляю для простого примера страницы под органический поиск