Перейти к содержанию

YuriGural

Новичок
  • Публикаций

    12
  • Зарегистрирован

  • Посещение

Репутация

2 Обычный

Информация о YuriGural

  • Звание
    Пользователь
  • День рождения 27.11.1972

Информация

  • Пол
    Мужчина
  • Город:
    Караганда
  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. YuriGural

    Проблема resize()

    Версия магазина: 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. YuriGural

    Проблема с htmlspecialchars()

    Как вам такое решение. 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. YuriGural

    Наполнить

    Откуда берутся данные и сколько всего товаров?
  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 сайт уже был практически готов, и адаптировать все изменения под новую версию, пока что не представилось возможным.
×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.