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

YuriGural

Newbie
  
  • Posts

    12
  • Joined

  • Last visited

Everything posted by YuriGural

  1. Может это поможет: my.cnf [mysqld] max_allowed_packet = 16M
  2. Не знаю как это делает Денвер. Но нужно в Apache, в файлике httpd.conf, либо vhosts.conf если указано Include conf/vhosts.conf, прописать: NameVirtualHost *:80 далее для каждого сайта <VirtualHost *:80> ServerName sputnik DocumentRoot /home/sputnik/www/ ServerAdmin webmaster@localhost ErrorLog logs/sputnik-error_log CustomLog logs/sputnik-access_log common <Directory /home/sputnik/www/> AllowOverride All </Directory> </VirtualHost> и также по аналогии для shop в файлике hosts 10.0.0.44 sputnik 10.0.0.44 shop Перезапускам Apache и все можно заходить.
  3. Версия магазина: OpenCart v1.4.x, v1.5.x Проблема: Не всегда правильно изменяются размеры превьюшек. Например, в настройках, размер большого изображения товара: 250х250. Оригинал изображения 140х250, результатом будет размещение изображения в cache размером 140х250, вместо 250х250. В некоторых ситуациях, это зависит от дизайна сайта, может поломаться весь вид. Решение: Открываем файл /system/library/image.php Всему виной вот этот кусок, в функции resize() $scale = min($width / $this->info['width'], $height / $this->info['height']); if ($scale == 1) { return; } Нужно проделать следующие манипуляции. Добавляем после этих строк: public function resize($width = 0, $height = 0) { if (!$this->info['width'] || !$this->info['height']) { return; } следующий код: if ($width == $this->info['width'] && $height == $this->info['height']) { return; } а ниже приведенные строки, удаляем: if ($scale == 1) { return; }
  4. Как вам такое решение. public function clean($data) { static $php525; if (!isset($php525)) { $php525 = version_compare(PHP_VERSION, '5.2.5', '>='); } if (is_array($data)) { foreach ($data as $key => $value) { unset($data[$key]); $data[$this->clean($key)] = $this->clean($value); } } else { //Org: $data = htmlspecialchars($data, ENT_QUOTES, 'UTF-8'); //Fix: if ($php525) { $data = (preg_match('/^./us', (string) $data) == 1) ? htmlspecialchars((string) $data, ENT_QUOTES, 'UTF-8') : ”; } else { $data = (preg_match('/^./us', $data) == 1) ? htmlspecialchars($data, ENT_QUOTES, 'UTF-8') : ”; } } return $data; }
  5. Планирую сделать демку, если кого-то заинтересует, могу на платной основе доработать для клиента, т.к. как правило, у всех свои конфигурации 1С, отличающиеся от типовой. Это реализовано, включая дополнительные картинки, в 1С - это все остальные картинки, которые лежат в "ХранилищеДополнительнойИнформации" привязанные к номенклатуре, но не являются основным изображением. Вот пример, http://biosfera.kz/index.php?route=product/product&product_id=1292 Так это выглядит в 1С.
  6. Не совсем понятно. Если переходим во второй уровень, то все вложенные категории должны быть раскрыты?
  7. Откуда берутся данные и сколько всего товаров?
  8. В принципе файл можно делить на части, но т.к. у меня надобности такой не возникало, одно из решений, которое я использую: ini_set('max_execution_time', 7200); ini_set("memory_limit","256M"); Далее, в случае если загрузка по какой-либо причине прерывается, то после повторного запуска загрузки, анализируется загружаемый пакет и строка которая была загружена последней, для продолжения загрузки с этого же места. Однако, пока что нет проверки на параллельности загрузки, для ее исключения, не было нужды, но думаю это не долго доделать. $file_log = DIR_LOGS . 'data1c.log'; $num_log = 0; if (file_exists($file_log)) { list($packet_log, $num_log) = explode(' ', file_get_contents($file_log)); if ($packet_log != $packet) { $num_log = 0; } } // ... $num = 0; while (($data = fgetcsv($file_data, 4096, ",")) !== false) { $num++; if ($num_log > $num) continue; // ... file_put_contents($file_log, $packet . ' ' . $num); } if (file_exists($file_log)) { unlink($file_log); }
  9. Для демки нужно какое-то время, обязательно подготовлю. Расскажу технологию. Начнем с того, что договоримся, что все данные создаются в 1C, OpenCart служит только движком для отображения этих данных, администрирование товаров в OpenCart категорически не желательно. Данные в 1С и OpenCart надо как-то синхронизировать по какому-то единому ключу. В OpenCart уникальный ключ это product_id, но т.к. данные изначально берутся из 1С, то ключ для синхронизации должен браться из него. Как вариант это может быть код справочника, плюс этого варианта - компактность, как правило длина кода 8-10 символов, минус - при удалении элемента справочника из 1С, эту же операцию мы не сможем проделать в OpenCart, результатом будет накопление в базе ненужных данных, которые должны быть удалены. Поэтому единственно правильным решением - это использовать GUID. Плюсов в использовании глобального уникального id в том, что во-первых можно изменять любые данные в справочниках, включая код и это никак не повлияет на искажение или неразбериху в базе OpenCart, во-вторых при удалении элемента справочника в 1С (обязательное использование плана обмена), мы точно так же сможем удалить этот элемент и в OpenCart, минус - в избыточности, длина GUID - 36 символов. Перейдем к формату данных для обмена. Отказываемся от использования XML, за его прожорливость. Все очень просто, пишем в текстовый файл построчно, одна запись - одна строка, поля отделяем разделителем, как правило это запятая (,), строки заключаем в кавычки ("), числа нет. В PHP есть функция fgetcsv(), которую мы и будем использовать для загрузки. В 1С собираем нужные нам данные используя план обмена, либо полная выгрузка всех данных. Первая строка файла обмена - служебная, туда можно включить, например, придуманный нами протокол обмена, его версию, тип выгрузки и т.п. При загрузке мы будем анализировать эту строку, для дальнейших действий, например, если версия загрузчика не совпадет с версией выгрузки (случайно подвернулся старый файлик обмена), то отказываемся от загрузки, если это полная выгрузка, то предварительно в OpenCart нужно почистить все таблицы, ну и т.п. В один файл будем писать данные по нескольким таблицам, для этого будем включать строку с ключевой фразой, например, для товаров - Products, для производителей - Manufacturers. Важна последовательность размещения таблиц, т.е. данные в которые включены ссылки на другие таблицы, должны идти позже. У меня эта последовательность такая НоменклатурныеГрупп (в opencart категории),ЗаводыИзготовители, ВидыХарактеристик, Номенклатура, ХарактеристикиНоменклатуры, ну и так далее. Вот пример записи из 1С данных по товарам: //... Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Количество() > 0 Тогда Файл.ЗаписатьСтроку("Products"); Пока Выборка.Следующий() Цикл GUID = Выборка.Ссылка.УникальныйИдентификатор(); //... Файл.ЗаписатьСтроку("""" + GUID + """,""" + Наименование + """,""" + Код + """,""" + ИмяКартинки + """,""" + GUID_ЗаводИзготовитель + """,""" + GUID_НоменклатурнаяГруппа + """,""" + GUID_ВидХарактеристикиНоменклатуры + """,""" + ДатаДоступности + """," + Статус + "," + Цена + "," + Остаток + "," + СтатусЗапаса); КонецЦикла; КонецЕсли; Загрузка в OpenCart. Предварительно нужно создать несколько таблиц для синхронизации справочников, как было описано выше. Например, для таблицы товаров: CREATE TABLE IF NOT EXISTS `oc_1c_product` ( `guid` varchar(36) COLLATE ascii_general_ci NOT NULL, `product_id` int(11) NOT NULL, PRIMARY KEY (`guid`), KEY `product_id` (`product_id`) ) ENGINE=MyISAM DEFAULT CHARSET=ascii COLLATE=ascii_general_ci; Вот пример функции для получения данных по товару по имеющемуся у нас GUID: function getProductByGuid($guid) { $data = false; $result = $this->db->query("SELECT p.*, pd.* FROM " . DB_PREFIX . "1c_product cp LEFT JOIN " . DB_PREFIX . "product p ON (cp.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE cp.guid = '" . $this->db->escape($guid) . "' AND pd.language_id = '" . (int)$this->language_id . "'"); if ($result->num_rows > 0) { $data = $result->row; } return $data; }
  10. Выгрузка самописная, формат данных самый примитивный - список полей через разделитель. Отказался от использования XML, т.к. объем данных очень большой.Могу описать саму идею, опубликую часть кода для понимания. Законченность модуль еще не имеет, постоянно что-то исправляю, дополняю. В планах в 1С сделать привязку к плану обмена, чтоб не все скопом выгружалось, а только то что было изменено в процессе работы в 1С (сейчас выгружается все). В opencart опять же в планах довести до автоматической загрузки данных. Пока что приходится указывать, где хранится файл с данными, фотки выгружаются из 1С в определенную папку, описания тоже в отдельную папку. Демку могу подготовить, если кого заинтересует можно уже и поговорить отдельно.
  11. Все данные хранятся в 1С 8.1 УТ, есть там такой регистр "ТоварыВРознице", каждые день данные выгружаются в opencart, по сути в админке opencart ничего делать не приходится, только если включить/выключить какой-либо из модулей. С логотипом история такая, заказали в какой-то дизайнерской конторе результат как обычно дают в CorelDraw, для веб-а ну никаких решений, пришлось самому в фотошопе как-то это дело приладить, ну не дизайнер я, программер :-)
  12. Предлагаю вашему вниманию перечень собственных наработки, которые пришлось внедрить при создании (пока что еще не интернет-магазина) каталога товаров с использованием OpenCart. - Выгрузка данных из 1С 8.1 УТ - импорт в OpenCart Пришлось добавить дополнительные таблицы для синхронизации номенклатуры и др. справочников по GUID в 1С. Все предлагаемые методы импорта/экспорта работают таким образом, что каждый раз нужно очищать таблицы и заново их загружать. Я пошел другим путем, создал таблицы с соответствием id в 1С и в OpenCart, теперь при выгрузке данных, я передаю изменения сделанные в 1С с момента последней выгрузки, соответственно в таблицах OpenCart нет надобности удалять все данные и переносить все по новой. - Модуль "Сниженные цены" Идея в следующем, в 1С создаются документы "Установка цен номенклатуры", которые изменяют цены на товары как в меньшую, так и в большую сторону, эти данные пишутся в регистр сведений "Цены номенклатуры", который в свою очередь используется для выгрузки цен в OpenCart. Т.е. цена в таблице products просто замещается новой текущей. Механизма, который бы хранил предыдущую цену в OpenCart нет. В новом модуле как раз и использован механизм хранения старых цен, причем не всех, а только тех которые были снижены в 1С, отображают цены которые были снижены за определенный период (например, месяц). - Модуль "Торговые точки" В OpenCart есть возможность создания нескольких магазинов используя одну базу данных, но для отображения на разных сайтах, идея хорошая, но скажите кто-нибудь пользуется этим? В моем случае, требуется одна база данных, но магазины должны находится на одном сайте. Если проводить параллели с 1С, то это просто разные склады, с данными о наличии одного и того же товара на имеющихся складах. Данный модуль хранит данные о наличии товара в каждой розничной точке, с отображением дополнительной информации (адрес, телефон, цена и т.д.). Информация доступна при открытии страницы о товаре, для этого добавлена еще одна закладка. Есть бокс (виджет), который отображает список всех торговых точек с данными (фото, адрес, телефон, время работы, google-карта). - Ссылка на завод-производитель (модификация) В OpenCart при выводе информации о товаре почему-то забыли о производителей, т.е. нигде нет данных при выводе перечня товаров, например при поиске или выбор по категориям. - Ссылка на категории из товара (модификация) Тоже самое касается и категорий, например я нахожу какой-нибудь товар в поиске, к каким категориям он относится, приходится только гадать. А ведь в OpenCart для этого все есть, создана даже функция getCategories($product_id). Ведь это нормально отобразить перечень категорий, к которым относится данный товар. - Поиск в найденном (модификация) Работает как в яндексе. Ищем что-либо, потом ставим галочку "Поиск в найденном" и меняем текст для поиска. Как это все работает можно посмотреть на готовом сайте http://biosfera.kz. В планах добавление других модулей (например, "Распродажа") и доработка опций товаров. Если есть интерес, просьба высказываться, какой из перечисленных модулей вызывает наибольший интерес, я постараюсь рассказать об этом подробней и подготовить его для использования. P.S. За основу взят движок версии 1.4.9.5. К сожалению, после выпуска версии 1.5.0 сайт уже был практически готов, и адаптировать все изменения под новую версию, пока что не представилось возможным.
×
×
  • 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.