Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

mario512

Users
  • Posts

    355
  • Joined

  • Last visited

Everything posted by 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 посетителей.
×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.