Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

mario512

Користувачі
  • Публікації

    355
  • З нами

  • Відвідування

Усі публікації користувача mario512

  1. Использовал API Яндекс, пока не прикрыли лавочку. Спасибо за замечание. Исправлю.
  2. Если у товара в 1с и OpenCart есть одинаковый реквизит, по которому их можно связать, то для обновления цен и остатков можно использовать mysql-connector-odbc-5.3.13-win32. Пример кода обработки 1с: Перем Соединение; Процедура УстановкаСоединения() Драйвер = "MySQL ODBC 5.3 Unicode Driver"; Сервер = ""; База = ""; Логин = ""; Пароль = ""; КодСтр = ""; КодСтр = "STMT=set character_set_results=cp1251;" Соединение = СоздатьОбъект("ADODB.Connection"); СтрокаСоединения = "DRIVER="+СокрЛП(Драйвер)+";SERVER="+СокрЛП(Сервер)+";DataBase="+СокрЛП(База)+";UID="+СокрЛП(Логин)+";PWD="+СокрЛП(Пароль)+";"+СокрЛП(КодСтр); Соединение.ConnectionString = (СтрокаСоединения); Попытка Соединение.Open(); Conect=1; Исключение Conect=0; Сообщить("Не могу подключиться к базе!!!"); КонецПопытки; КонецПроцедуры Процедура ВыгрузитьОстатки() УстановкаСоединения(); ЗапросНоменклатура = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(ВыбратьНоменклатуру) |Номенклатура = Справочник.ДопРеквизиты.ТекущийЭлемент; |НоменклатураТМЦ = Справочник.ДопРеквизиты.ТМЦ.ТекущийЭлемент; |НоменклатураЦена = Справочник.ДопРеквизиты.ТМЦ.ТекущийЭлемент.Цена2; |Условие(Номенклатура.АйДи <> 0); |Условие(Номенклатура.Включить = Перечисление.ДаНет.Да); |Группировка Номенклатура; |Функция Сч = Счётчик(); |";//}}ЗАПРОС Если ЗапросНоменклатура.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Кол = 0; Размер = ЗапросНоменклатура.Сч; Пока ЗапросНоменклатура.Группировка(1) = 1 Цикл Номенклатура = ЗапросНоменклатура.Номенклатура; НоменклатураТМЦ = ЗапросНоменклатура.НоменклатураТМЦ; НоменклатураЦена = ЗапросНоменклатура.НоменклатураЦена; Если Номенклатура.ЭтоГруппа() = 0 тогда Кол = Кол+1; глПрогрессор("Выгружаю Остатки",Размер,Кол); Ид = СокрЛП(Номенклатура.АйДи); Остаток = Регистр.Остатки.СводныйОстаток(0,НоменклатураТМЦ,Константа.БазСклад,,"Кво"); Запрос = "UPDATE `oc_product` SET `quantity` = "+Остаток+", `price`="+НоменклатураЦена+" WHERE `product_id` = "+Ид; Соединение.Execute(Запрос); КонецЕсли; КонецЦикла; КонецПроцедуры При данном подходе, запись производится непосредственно в бд. Сам магазин модифицировать необходимости нет.
  3. Вообще стандартная, в базе данный плоттера более 10k моделей устройств, на которые он ее режет. Сама плёнка имеет три разновидности. Думал что просто создать три варианта, и показывать во всех связанных по тематике категориях, привязав ко всем моделям смартфонов, в значениях фильтрах товара. Далее, для каждого производителя устройств, создать посадочную страницу, с поисковыми ключами наиболее актуальных моделей.
  4. @egor23 Спасибо за замечания по корзине. Доработал. Добавил возможность редактировать заказ в корзине. Провел различные оптимизации по скорости работы сайта. Товаров примерно 17k.
  5. Добрый день. Сайт с мобильными аксессуарами. Есть универсальная позиция товара (гидрогелиевая пленка). Не могу решить, как правильно поступить. Плодить кучу практически одинаковых позиций или создать одну, связав с нужными значениями фильтра? OCFilter.
  6. Спасибо. Перенес в каталог, но не могу обратиться к процедуре. Файл copyfilter.php лежит в каталоге catalog/controller/api/ Содержимое: Файл filtercopy.php лежит catalog/model/extension/module/ код: <?php class ModelExtensionModuleFiltercopy extends Model { public function Write($data = array()){ $this->log->write(print_r($data, true)); } } При обращении к нему получаю: Fatal error: Call to a member function Write() on null in /var/www/korney01/data/www/test.caseroom.in.ua/catalog/controller/api/copyfilter.php on line 18 Что не так?
  7. Добрый день. Набросал свой апи, который должен вызывать метод $this->model_catalog_ocfilter->copyFilters($this->request->post);, но получаю нотис: Notice: Undefined property: Proxy::copyFilters in /var/www/korney01/data/www/test.caseroom.in.ua/catalog/controller/api/copyfilter.php on line 18 Насколько я понял, что api из catalog не может напрямую вызывать методы из админки. Вот содержимое файла: <?php class ControllerApiCopyFilter extends Controller { public function copy() { $json = array(); if (!isset($this->session->data['api_id'])) { $json['error'] = $this->language->get('error_permission'); } else { $this->load->language('extension/module/ocfilter'); if ($this->request->server['REQUEST_METHOD'] == 'POST') { $this->load->model('catalog/ocfilter'); $this->model_catalog_ocfilter->copyFilters($this->request->post); $json['success'] = $this->language->get('text_complete'); } } $this->response->addHeader('Content-Type: application/json'); $this->response->setOutput(json_encode($json)); } } Как вызвать этот метод? Гугление не помогло. Спасибо за любой совет.
  8. Мой ip в списке разрешенных. В catalog/controller/api/login.php сессию стартует данная строчка: $this->session->start('api', $session_id_new); //$session_id_new получаю. Пример функции, стартующей сессию, system/library/session.php public function start($key = 'default', $value = '') { if ($value) { $this->session_id = $value; } elseif (isset($_COOKIE[$key])) { $this->session_id = $_COOKIE[$key]; } else { $this->session_id = $this->createId(); } if (!isset($_SESSION[$this->session_id])) { $_SESSION[$this->session_id] = array(); } $this->data = &$_SESSION[$this->session_id]; if ($key != 'PHPSESSID') { setcookie($key, $this->session_id, ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'), ini_get('session.cookie_secure'), ini_get('session.cookie_httponly')); } return $this->session_id; } Насколько я понял, должна стартовать сессия с именем api и с соответствующий кукой.
  9. Пытаюсь, по найденным в сети примерам работы апи опренкарт, добавить свой метод в апи. Пример файла: <?php class ControllerApiCopyFilter extends Controller { public function copy() { $json = array(); $this->log->write($this->request->post); $this->log->write($this->session->data['api_id']); if (!isset($this->session->data['api_id'])) { $json['error']['warning'] = $this->language->get('error_permission'); } else { $this->log->write($this->request->post); } $this->response->addHeader('Content-Type: application/json'); $this->response->setOutput(json_encode($json)); } } Получаю токен: stdClass Object ( [success] => API сессия успешно запущена! [token] => 0RpUQqTbHMT6pomZHLwwm********* ) Далее обращаюсь к своему методу: if(isset($token)) { $url = DOMEN_NAME."index.php?route=api/copyfilter/copy/&token=".$token; $post = array ( 'copy_type' => 'checkbox', 'copy_status' => '-1', 'copy_attribute' => '0', 'copy_filter' => '1', 'copy_option' => '1', 'copy_truncate' => '1', 'copy_category' => '1' ); $curl = curl_init( $url ); curl_setopt_array( $curl, array( CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_POSTFIELDS => $post, CURLOPT_COOKIEFILE, 'cookie.txt') ); $result=curl_exec($curl); a($result); curl_close($curl); Получаю: Notice: Undefined index: api_id in /var/www/korney01/data/www/test.caseroom.in.ua/catalog/controller/api/copyfilter.php on line 9{"error":{"warning":"error_permission"}} Что я делаю не так?
  10. @controll Стоит аналогичная задача. Какая версия OpenCart у вас?
  11. copy_store у меня нет. Не нравится ему токен сессия, полученная через API.
  12. Добрый день.Пытаюсь скопировать значения стандартных фильтров в модуле OCFilter. Есть скрипт, который парсит товары их xml. Есть хотелка, которая после парсинга обращается к модулю OCFilter, посредством пост запроса. Пример кода: $token = token(); if(isset($token)) { $url = DOMEN_NAME."admin/index.php?route=extension/module/ocfilter/copyFilters&token=".$token; $post = array ( 'copy_type' => 'checkbox', 'copy_status' => '-1', 'copy_attribute' => '0', 'copy_filter' => '1', 'copy_option' => '1', 'copy_truncate' => '1', 'copy_category' => '1' ); $curl = curl_init( $url ); curl_setopt_array( $curl, array( CURLOPT_RETURNTRANSFER=> TRUE, CURLOPT_POSTFIELDS => $post ) ); $response = json_decode(curl_exec( $curl )); curl_close($curl); echo $response; } Токен получаю по API. Но копирования фильтров не происходит. Подскажите, что не так?)
  13. Это модифицированная стандартная корзина. Спасибо.
  14. Тема закрыта. Скрипт, в зависимости от того как я его запускал, использовал разные каталоги. Соответственно, я парсил разные файлы. Впредь буду указывать абсолютные пути к файлам)))) @nikifalex оказался прав. В некоторой степени...
  15. Версия php 7.2 Изначально в эту сторону копал. По поводу остального буду смотреть. Спасибо за наводку. COUNT_RECURSIVE считает вложенные массивы. Это мне не подходит. Вывод консоли php --ini Configuration File (php.ini) Path: /opt/alt/php72/etc Loaded Configuration File: /opt/alt/php72/etc/php.ini Scan for additional .ini files in: /opt/alt/php72/link/conf Additional .ini files parsed: /opt/alt/php72/link/conf/alt_php.ini
  16. @nikifalex Да вроде все норм. Я открывал исходный файл xml. Количество элементов в нем равно значению var_dump -> int(13542) Получаю объект: $xml = simplexml_load_file($file_xml,'SimpleXMLElement', LIBXML_NOCDATA); Далее преобразую объект в массив: $product_data_arr = json_decode(json_encode($xml->shop->offers), true); Сравниваю количество элементов полученного массива и исходного файла xml, все сходится.
  17. @fanatic Браузер:var_dump -> int(13542)shell:var_dump ->int(17366) Судя по файлу xml, который разбираю, верное значение 13542. Получаю его выполняя скрипт в браузере, или post/get запросом.
  18. Добрый день. Есть массив, размер которого составляет 13542 элемента. Если скрипт запустить в браузере, то в этом случае функция count() возвращает 13542. Если скрипт запустить используя ssh/bash/shell/cron то функция вернет другое число. Браузер: var_dump -> int(13542) shell: var_dump ->int(17366) Есть идеи?
  19. @VladimirGodelman Добрый день. Нет. Остается в карточке товара.
  20. Добрый день. Магазин изначально планировался как каталог. SEO плотно не занимались. Только на уровне консультаций. На данный момент до 30 посетителей.
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.