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

DRONGO

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

    217
  • З нами

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

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

  1. Возможно, я неправильно выразился... товар мы учитываем вручную (по фоткам, по бумажкам..._ - чтобы контролировать воровство. А так, на сайте у нас полная и 100% верная информация: штрихкоды, наименования, оптовая цена, розничная цена, кол-во в определённом офлайн магазине, фото.
  2. Всё по тетрадкам, вручную... к сожалению. Данную доработку планируем использовать и как учётную систему. Основа, конечно, генерация листа продаж и лист прихода... а потом эту информацию уже можно будет складывать и вычитать...
  3. Здравствуйте! Сразу хочу сказать - обновлять движок не буду, этот устраивает полностью (сил и денег вложено много); понимаю, что всё это полная дичь, но это меньшее из зол (в плане мат затрат). У меня интернет магазин (полностью рабочий с точным наличием и ценами - в том числе оптовыми), есть 3 офлайн магазина. В интернет магазине есть поля для каждого офлайн магазина + поле центральный склад. Нужно сделать подобие торговой системы: продавец сканирует штрихкода - модуль генерирует лист продажи, которые можно подредактировать (цену, колв-во, удалить товар)... - когда клиент расплачивается, продавец нажимает кнопку "продажа" и лист продажи закрывается - при этом товары автоматически минусуются из интернет магазина. По аналогии нужно сделать будет опции: перемещение товара, приём товара, бронирование - тоже всё через сканер и с генерацией файлика, который остаётся в админке и который можно распечатать.. Готов всё объяснить по тел, письменно, нарисовать схематично... тому, кто реально может такое сделать! Пожалуйста отзовитесь, очень нужен рабочий инструмент, причём срочно (но со сроками не тороплю). Привязка к кассе и терминалу не нужна. Тупо сканер + сайт.
  4. Здравствуйте! Есть сайт на опенкарт. При переходе на страницу товара (даже вот с главной страницы) - открывается сайт.ру/юрл-товара.... вместо сайт.ру/юрл-категории/юрл-подкатегории/url-товара... То-есть - мало того, что ссылки неправильно генерируются в модулях (и в категоряих тоже) но и открываются... - вметсо того чтобы редиректить на правильный юрл... Кто сможет помочь - пишите стоимость, оябзательно договоримся!!!
  5. Очень нужна помощь! Конкуренты атакуют ботами, мне кажется безуспешно... но боюсь блока домена от гоши или яши... а в гугле позиции просели - возможно из-за методичной накрутки токсичных ПФ... Подскажите какой ни будь хороший скрипт, для сбора логов. И может кто то сталкивался с проблемой.. может есть пакет ip ботов или ещё какие ни будь решения. ip-сети ботов: Tele2 Russia IP Network (SPB) Metropolitan branch of OJSC MegaFon North-West Branch of OJSC MegaFon Network и проч кал...
  6. Здравствуйте! Пока я мечтал перетянуть верстку на 2.0... вышла 3.0 =))) А мой сайт на 1.5 как работал, так и работает. К чему это я? К тому, что сайт мой на 1.5 и переезжать я не собираюсь =))) Понятно что очень много людей, желающих заработать - пилят модули на последние версии, но моя задача кормить себя, а не кого либо. Вот такая филасофия 1.5 Ищу исполнителя: Починить/дорабоать модуль "Доставка в зависимости от расстояния", сейчас вроде работает, но км и сумму не считает. Необходимо сделать, чтобы модуль считал стоимость доставки от суммы заказа и дальности в км. У меня ещё много нерешённых задач, надеюсь начать постоянное, взаимовыгодное сотрудничество.
  7. Интересный модуль, для моей старушки подойдёт даже... спасибо!
  8. Запрос я бы сделал на копию... чтобы имеющиеся акции продублировались постоянным клиентам, в акционных товарах... Но это как то коряво, хочется сделать качественно и управляемо и чтобы экономило время в будущем... а то прописывать всем акционным товарам по 2 акции - не комильфо. Думал, может есть стандартное решение в админке... и я просто не догоняю?!?
  9. Да, но тогда придётся передлпатить весь товар, на который уже стоит акция для всех, обычная... нужно будет зайти в каждый товар и продублировать данную акцию, но уже со второй группой клиентов. Может есть какой нить модуль или опция для 1541?
  10. Есть 2 группы покупателей: 1) Default 2) Постоянный клиент (создал только что) На сайте куча постоянных акций на большое кол-во товаров, эти акции видны всем: зереганым, незареганым... всем подряд. Я хочу сделать более высокие акции, для группы "постоянный клиент", возможно они будут на те товары - на которые сейчас вообще нет акции либо просто больше, чем обычная акция... и приоритет у них будет выше (если зашёл постоянный клиент он видит более высокую акцию на товар, если скидок 2 шт) Так то сделал, но тогда "постоянный" клиент не видит и не может воспользоваться обычными акциями, если логинется видит только те акции, которые прописаны только для его группы. Например, зашёл постоянный клиент и купил 3 товара: 1 товар с обычной акцией (её видят все), 2 товар по спец акции (её видит только отдельная группа), а 3 товар вообще без акции... То-есть нужно сделать так, чтобы 1 группа клиентов видела только 1 набор акций, а другая группа 2 набора акций и второй набор более высоких акций перекрывал (был приоритетом выше) обычные. Как такое сделать? Очень нужно!!!
  11. Для поддержки магазина нужен программист. Магазин на 1.5.4.1, переходить на 2.0 было в планах, а тут уже появилась 3.х... Сайт прекрасно функционирует на версии 1.5.4.1 Поэтому, сразу оговорюсь, версию обновлять не будем, во всяком случае в ближайшее время. Требуются доработки, верстать сам умею... поэтому нужен шаман по php + желательно и Js... Какие именно правки? Правки нестандартные, в процессе работы с магазином появляются нужды в расширении функционала. Предлагаю связаться по тел, почте, вк.. фейсбук.. буду скидывать по 1 задаче. Большая просьба не беспокоить тех, кто уже собрался перепощивать всё это на фриланс... я там тоже есть, там и сам могу найти кого угодно. Нужен чел шарящий в опенкарте, в 1541, который умеет ручками и в блокнотике... а не ctrl+c. ctrl+v....
  12. Объясняю по порядку. Есть интернет магазин, как отдельная торговая единица... есть 2 офлайн магазина. Товар везде одинаковый, но вкусы разные. Если чел заказал через ИМ - его не должно волновать, где именно заказанный товар... его доставят по адресу или привезут в тот магазин, из которого чел сам хочет забрать. А вот что делать, если чел захотел сам приехать в магазин, без заказов и звонков... нужно же проинформировать его - какой и где вкус (вот так это выглядит https://fotohosting.su/images/2019/02/10/2019-02-10_161043.jpg в черновом варианте) Плюс очень важная плюшка, необходимо сделать, уже вернее седелал - при авторизации юзера с определённым id - в каталоге выводится точное кол-во определённых вкусов и оптовая цена... чтобы админу было проще ориентироваться, при формировании оптовых заказов. .. Поэтому, миникалькулятор - очень важен, вот что он должен уметь: 1) Складывать сумму из двух инпутов в 1 главный, используемый системой -- https://fotohosting.su/images/2019/02/10/2019-02-10_154750.jpg 2) Хз возмжно ли, но было бы супер, если бы инпуты складывались ещё и по вертикали и сумма выводилась бы вот в эти ячейки -- https://fotohosting.su/images/2019/02/10/2019-02-10_160229.jpg Готов оплатить помощь по реализации!
  13. Есть магазин спортпита... админам нужно выводить кол-во товара на точках и оптовую цену. Для реализации я сделал копию сайта на поддомене но без папки image... ограничел доступ .htpasswd думал подключить картинки простым движением руки define('DIR_IMAGE', 'https://мойпациент.ru/image/'); Но не тут то было... не работает. Версия 1541 Помогите пожалуйста
  14. Согласен. Но для меня печальнее нерешённая задача... можете помочь? Готов обсудить стоимость работ.
  15. Помогите пожалуйста, я занимаюсь вёрсткой и в php очень слабо соображаю. У меня интернет магазин и офлайн магазин в котором есть продавец. Хочу продавцу поручить работу с интернет-магазином, но прежде - хочу ограничить доступ к ненужным ему разделам (это я сделаю стандартными настройками). Но есть нюанс - никак не получается скрыть созданное мною поле "оптовая цена", где оно и зачем: http://s5.uploads.ru/SXZTf.jpg Думал просто скрыть его вот таким кодом: <?php if (!(strip_tags(html_entity_decode($logged)) == 'Вы вошли как prodavec')){ ?> <tr> <td>Оптовая цена</td> <td><input type="text" name="priceopt" value="<?php echo $priceopt; ?>"/></td> </tr> <?php } ?> Но тогда при сохранении товара вылаpит ошибка, что не определён $priceopt Что нужно прописать в контроллере, чтобы в таблицу никаких изменений не вносилось (по этому полю) и ошибки не вылазило? Сейчас там у меня вот что: if (isset($this->request->post['priceopt'])) { $this->data['priceopt'] = $this->request->post['priceopt']; } elseif (!empty($product_info)) { $this->data['priceopt'] = $product_info['priceopt']; } else { $this->data['priceopt'] = ''; } Или может ещё какие нибудь варианты будут?
  16. Мне его ставил чувак с фриланса, когда делал праки по заказу, до кучи... если это платный модуль - скорее всего нуленный...
  17. Здравствуйте! Есть ли возможность дополнить модуль кнопкой "распечать ценники", чтобы можно было выбрать товар и нажать на неё - сгенерированная страница открывалась бы в соседней вкладки. Лично мне нужно вывести инфу php теги... остальную вёрстку и дизайн сам подгоню. Функционал очень нужен, прошу автора серьёзно рассмотреть вопрос и, если есть время и желание, озвучить стоимость доработки.
  18. Тык вот это у меня и не получается... портянка - из тпл шаблон страницы товара, а яндекс маркет генерится в контроллере. Код наименования товара ЯМ - генерится вот этим кодом (наименование, объём, производитель) - $data['name'] = (''.$product['name'].' '.round($product['weight'], 2).' '.$product['manufacturer'].''); А единицы измерения в тпл вывода страницы товара - <?php if ($weight_class_id==4) {?><?php echo " капс"; ?><?php } ?> И я не знаю как в код ЯМ - вставить такое условие, как его адаптировать...?
  19. <h1><?php require_once(DIR_SYSTEM . 'library/user.php'); $this->registry->set('user', new User($this->registry)); if ($this->user->isLogged()) { $userLogged = true; } else { $userLogged = false;} if ($userLogged) { ?><a href="/admin/index.php?route=catalog/product/update&token=<?php echo $this->session->data['token']; ?>&product_id=<?php echo $product_id; ?>" target="_blank" ><?php } ?><span class="product-name"><?php echo $heading_title; ?></span> <?php echo round($weight, 2); ?> <?php if ($weight_class_id==1) {?><?php echo ' кг'; ?><?php } ?> <?php if ($weight_class_id==2) { echo " гр"; } ?> <?php if ($weight_class_id==3) {?><?php echo " мл"; ?><?php } ?> <?php if ($weight_class_id==4) {?><?php echo " капс"; ?><?php } ?> <?php if ($weight_class_id==5) {?><?php echo " табл"; ?><?php } ?> <?php if ($weight_class_id==6) {?><?php echo " шт"; ?><?php } ?> <?php if ($weight_class_id==7) {?><?php echo " упаковка"; ?><?php } ?> <?php if ($ean) { ?>/<?php echo $ean; ?> порций<?php } ?> <?php if ($manufacturer!=='Китай' && $manufacturer!=='Россия' && $manufacturer!=='Беларусь' && $manufacturer!=='Индонезия'){ ?> от <?php echo $manufacturer; ?> <?php } ?> <?php require_once(DIR_SYSTEM . 'library/user.php'); $this->registry->set('user', new User($this->registry)); if ($this->user->isLogged()) { $userLogged = true; } else { $userLogged = false;} if ($userLogged) { ?></a><?php } ?></h1> Ну это очень удобно из данных товара я могу генерировать что угодно и где угодно... сейчас и в последствии. Хотелось бы что бы генерировалась такая же хрень и в модуле яндекс маркета. Там у меня ещё ссылка, которая активируется при авторизации от админа - для быстрого редактирования товара, как в вордпрессе
  20. У меня в магазине полное наименование товаров генерируются из рахных полей: название, производитель, объём (в гр, капс, млл, кг...) кол-во порций. Соответственно, когда я поставил модуль и выгрузил всё на яндекс маркет - название выгрузились вот так: BCAA Capsules вместо BCAA Capsules 120 капс/24 порций от Be First У меня стоит какой то самый простой модуль, для выгрузки в ЯМ, частично мне удалось сгенерировать заголовки вот такой конструкцией: $data['name'] = (''.$product['name'].' '.round($product['weight'], 2).''.$weight_class.' '.$product['manufacturer'].''); Но '.$weight_class.' - не работает, если выводить вот так '.$product['weight_class_id'].' - id выводится корректно! '.$weight_class.' -- я пытаюсь вывести вот таким кодом : if ($product['weight_class_id'] == 1){ $weight_class = 'кг'; } if ($product['weight_class_id'] == 2){ $weight_class = 'гр'; } if ($product['weight_class_id'] == 3){ $weight_class = 'мл'; } Целый код генерации ЯМ ниже. Всё затрудняется ещё тем, что после каждой правки - изменения видны только спустя время... файл почему то обновляется не сразу. Я уже задолбался, помогите пожалуйста Что нужно, чтобы '.$weight_class.' выводил млл, капс и проч? Опенкарт 1541 <?php /** * Класс YML экспорта * YML (Yandex Market Language) - стандарт, разработанный "Яндексом" * для принятия и публикации информации в базе данных Яндекс.Маркет * YML основан на стандарте XML (Extensible Markup Language) * описание формата YML http://partner.market.yandex.ru/legal/tt/ */ class ControllerFeedYandexMarket extends Controller { private $shop = array(); private $currencies = array(); private $categories = array(); private $offers = array(); private $from_charset = 'utf-8'; private $eol = "\n"; public function index() { if ($this->config->get('yandex_market_status')) { if (!($allowed_categories = $this->config->get('yandex_market_categories'))) exit(); $this->response->addHeader('Content-Type: application/xml'); $filename = DIR_DOWNLOAD . 'offers.yml'; if (!is_file($filename) || time() - @filemtime($filename) > 60*30) { // one time per half of hour $fd = fopen($filename, 'w'); $this->load->model('export/yandex_market'); $this->load->model('localisation/currency'); $this->load->model('tool/image'); $this->load->model('catalog/product'); // Магазин $this->setShop('name', $this->config->get('yandex_market_shopname')); $this->setShop('company', $this->config->get('yandex_market_company')); $this->setShop('url', HTTP_SERVER); $this->setShop('phone', $this->config->get('config_telephone')); $this->setShop('platform', 'ocStore'); $this->setShop('version', VERSION); // Валюты // TODO: Добавить возможность настраивать проценты в админке. $offers_currency = $this->config->get('yandex_market_currency'); if (!$this->currency->has($offers_currency)) exit(); $decimal_place = $this->currency->getDecimalPlace($offers_currency); if (!$decimal_place) { $decimal_place = 2; } if ($product['weight_class_id'] == 1){ $weight_class = 'кг'; } if ($product['weight_class_id'] == 2){ $weight_class = 'гр'; } if ($product['weight_class_id'] == 3){ $weight_class = 'мл'; } if ($product['weight_class_id'] == 4){ $weight_class = 'капс'; } if ($product['weight_class_id'] == 5){ $weight_class = табл ; } if ($product['weight_class_id'] == 6){ $weight_class = 'шт'; } if ($product['weight_class_id'] == 7){ $weight_class = 'уп'; } $shop_currency = $this->config->get('config_currency'); $this->setCurrency($offers_currency, 1); $currencies = $this->model_localisation_currency->getCurrencies(); $supported_currencies = array('RUR', 'RUB', 'USD', 'BYR', 'KZT', 'EUR', 'UAH'); $currencies = array_intersect_key($currencies, array_flip($supported_currencies)); foreach ($currencies as $currency) { if ($currency['code'] != $offers_currency && $currency['status'] == 1) { $this->setCurrency($currency['code'], number_format(1/$this->currency->convert($currency['value'], $offers_currency, $shop_currency), 4, '.', '')); } } // Категории $categories = $this->model_export_yandex_market->getCategory(); foreach ($categories as $category) { $this->setCategory($category['name'], $category['category_id'], $category['parent_id']); } // Товарные предложения $in_stock_id = $this->config->get('yandex_market_in_stock'); // id статуса товара "В наличии" $out_of_stock_id = $this->config->get('yandex_market_out_of_stock'); // id статуса товара "Нет на складе" $vendor_required = false; // true - только товары у которых задан производитель, необходимо для 'vendor.model' $products = $this->model_export_yandex_market->getProduct($allowed_categories, $out_of_stock_id, $vendor_required); $yml = '<?xml version="1.0" encoding="utf-8"?>' . $this->eol; $yml .= '<!DOCTYPE yml_catalog SYSTEM "shops.dtd">' . $this->eol; $yml .= '<yml_catalog date="' . date('Y-m-d H:i') . '">' . $this->eol; $yml .= '<shop>' . $this->eol; // информация о магазине $yml .= $this->array2Tag($this->shop); // валюты $yml .= '<currencies>' . $this->eol; foreach ($this->currencies as $currency) { $yml .= $this->getElement($currency, 'currency'); } $yml .= '</currencies>' . $this->eol; // категории $yml .= '<categories>' . $this->eol; foreach ($this->categories as $category) { $category_name = $category['name']; unset($category['name'], $category['export']); $yml .= $this->getElement($category, 'category', $category_name); } $yml .= '</categories>' . $this->eol; $yml .= '<offers>' . $this->eol; fwrite($fd, $yml); $buffer = ''; $buffer_size = 128*1024; // 128Kb foreach ($products as $product) { $data = array(); // Атрибуты товарного предложения $data['id'] = $product['product_id']; // $data['type'] = 'vendor.model'; $data['available'] = ($product['quantity'] > 0 || $product['stock_status_id'] == $in_stock_id); // $data['bid'] = 10; // $data['cbid'] = 15; // Параметры товарного предложения $data['url'] = $this->url->link('product/product','path=' . $this->getPath($product['category_id']) . '&product_id=' . $product['product_id']); // USE THIS TO SPEED UP: $data['url'] = HTTP_SERVER . 'index.php?route=product/product&path=' . $this->getPath($product['category_id']) . '&product_id=' . $product['product_id']; $data['price'] = number_format($this->currency->convert($this->tax->calculate($product['price'], $product['tax_class_id']), $shop_currency, $offers_currency), $decimal_place, '.', ''); $data['currencyId'] = $offers_currency; $data['categoryId'] = $product['category_id']; $data['delivery'] = 'true'; // $data['local_delivery_cost'] = 100; $data['name'] = (''.$product['name'].' '.round($product['weight'], 2).''.$weight_class.' '.$product['manufacturer'].''); $data['vendor'] = $product['manufacturer']; $data['vendorCode'] = $product['model']; $data['model'] = $product['name']; $data['description'] = $product['description']; $data['sales_notes'] = 'Необходима 100% предоплата заказа!'; // $data['manufacturer_warranty'] = 'true'; // $data['barcode'] = $product['sku']; if ($product['image']) { //$data['picture'] = $this->model_tool_image->resize($product['image'], 500, 500); $image_path = 'image/' . $product['image']; if (strpos($image_path, ' ') !== false) { $new_image_path = str_replace(' ', '__', $image_path); if (!file_exists($new_image_path)) { $new_image_dir = dirname($new_image_path); if (!is_dir($new_image_dir)) { mkdir($new_image_dir, 0777, true); } copy($image_path, $new_image_path); } $image_path = $new_image_path; } $data['picture'] = HTTP_SERVER . $image_path; } $attribute_groups = $this->model_catalog_product->getProductAttributes($product['product_id']); if (!empty($attribute_groups)) { $data['param'] = array(); foreach ($attribute_groups as $attribute_group) { foreach ($attribute_group['attribute'] as $attribute) { $data['param'][] = array ( 'name' => $attribute['name'], 'value' => $attribute['text'], ); } } } /* // пример структуры массива для вывода параметров $data['param'] = array( array( 'name'=>'Wi-Fi', 'value'=>'есть' ), array( 'name'=>'Размер экрана', 'unit'=>'дюйм', 'value'=>'20' ), array( 'name'=>'Вес', 'unit'=>'кг', 'value'=>'4.6' ) ); */ $offer = $this->setOffer($data); $tags = $this->array2Tag($offer['data']); unset($offer['data']); if (isset($offer['param'])) { $tags .= $this->array2Param($offer['param']); unset($offer['param']); } $buffer .= $this->getElement($offer, 'offer', $tags); if (strlen($buffer) >= $buffer_size) { fwrite($fd, $buffer); $buffer = ''; } } if ($buffer != '') { fwrite($fd, $buffer); } $yml = ''; $yml .= '</offers>' . $this->eol; $yml .= '</shop>'; $yml .= '</yml_catalog>'; fwrite($fd, $yml); fclose($fd); } readfile($filename); // //$this->categories = array_filter($this->categories, array($this, "filterCategory")); } } /** * Методы формирования YML */ /** * Формирование массива для элемента shop описывающего магазин * * @param string $name - Название элемента * @param string $value - Значение элемента */ private function setShop($name, $value) { $allowed = array('name', 'company', 'url', 'phone', 'platform', 'version', 'agency', 'email'); if (in_array($name, $allowed)) { $this->shop[$name] = $this->prepareField($value); } } /** * Валюты * * @param string $id - код валюты (RUR, RUB, USD, BYR, KZT, EUR, UAH) * @param float|string $rate - курс этой валюты к валюте, взятой за единицу. * Параметр rate может иметь так же следующие значения: * CBRF - курс по Центральному банку РФ. * NBU - курс по Национальному банку Украины. * NBK - курс по Национальному банку Казахстана. * СВ - курс по банку той страны, к которой относится интернет-магазин * по Своему региону, указанному в Партнерском интерфейсе Яндекс.Маркета. * @param float $plus - используется только в случае rate = CBRF, NBU, NBK или СВ * и означает на сколько увеличить курс в процентах от курса выбранного банка * @return bool */ private function setCurrency($id, $rate = 'CBRF', $plus = 0) { $allow_id = array('RUR', 'RUB', 'USD', 'BYR', 'KZT', 'EUR', 'UAH'); if (!in_array($id, $allow_id)) { return false; } $allow_rate = array('CBRF', 'NBU', 'NBK', 'CB'); if (in_array($rate, $allow_rate)) { $plus = str_replace(',', '.', $plus); if (is_numeric($plus) && $plus > 0) { $this->currencies[] = array( 'id'=>$this->prepareField(strtoupper($id)), 'rate'=>$rate, 'plus'=>(float)$plus ); } else { $this->currencies[] = array( 'id'=>$this->prepareField(strtoupper($id)), 'rate'=>$rate ); } } else { $rate = str_replace(',', '.', $rate); if (!(is_numeric($rate) && $rate > 0)) { return false; } $this->currencies[] = array( 'id'=>$this->prepareField(strtoupper($id)), 'rate'=>(float)$rate ); } return true; } /** * Категории товаров * * @param string $name - название рубрики * @param int $id - id рубрики * @param int $parent_id - id родительской рубрики * @return bool */ private function setCategory($name, $id, $parent_id = 0) { $id = (int)$id; if ($id < 1 || trim($name) == '') { return false; } if ((int)$parent_id > 0) { $this->categories[$id] = array( 'id'=>$id, 'parentId'=>(int)$parent_id, 'name'=>$this->prepareField($name) ); } else { $this->categories[$id] = array( 'id'=>$id, 'name'=>$this->prepareField($name) ); } return true; } /** * Товарные предложения * * @param array $data - массив параметров товарного предложения */ private function setOffer($data) { $offer = array(); $attributes = array('id', 'type', 'available', 'bid', 'cbid', 'param'); $attributes = array_intersect_key($data, array_flip($attributes)); foreach ($attributes as $key => $value) { switch ($key) { case 'id': case 'bid': case 'cbid': $value = (int)$value; if ($value > 0) { $offer[$key] = $value; } break; case 'type': if (in_array($value, array('vendor.model', 'book', 'audiobook', 'artist.title', 'tour', 'ticket', 'event-ticket'))) { $offer['type'] = $value; } break; case 'available': $offer['available'] = ($value ? 'true' : 'false'); break; case 'param': if (is_array($value)) { $offer['param'] = $value; } break; default: break; } } $type = isset($offer['type']) ? $offer['type'] : ''; $allowed_tags = array('url'=>0, 'buyurl'=>0, 'price'=>1, 'wprice'=>0, 'currencyId'=>1, 'xCategory'=>0, 'categoryId'=>1, 'picture'=>0, 'store'=>0, 'pickup'=>0, 'delivery'=>0, 'deliveryIncluded'=>0, 'local_delivery_cost'=>0, 'orderingTime'=>0); switch ($type) { case 'vendor.model': $allowed_tags = array_merge($allowed_tags, array('typePrefix'=>0, 'vendor'=>1, 'vendorCode'=>0, 'model'=>1, 'provider'=>0, 'tarifplan'=>0)); break; case 'book': $allowed_tags = array_merge($allowed_tags, array('author'=>0, 'name'=>1, 'publisher'=>0, 'series'=>0, 'year'=>0, 'ISBN'=>0, 'volume'=>0, 'part'=>0, 'language'=>0, 'binding'=>0, 'page_extent'=>0, 'table_of_contents'=>0)); break; case 'audiobook': $allowed_tags = array_merge($allowed_tags, array('author'=>0, 'name'=>1, 'publisher'=>0, 'series'=>0, 'year'=>0, 'ISBN'=>0, 'volume'=>0, 'part'=>0, 'language'=>0, 'table_of_contents'=>0, 'performed_by'=>0, 'performance_type'=>0, 'storage'=>0, 'format'=>0, 'recording_length'=>0)); break; case 'artist.title': $allowed_tags = array_merge($allowed_tags, array('artist'=>0, 'title'=>1, 'year'=>0, 'media'=>0, 'starring'=>0, 'director'=>0, 'originalName'=>0, 'country'=>0)); break; case 'tour': $allowed_tags = array_merge($allowed_tags, array('worldRegion'=>0, 'country'=>0, 'region'=>0, 'days'=>1, 'dataTour'=>0, 'name'=>1, 'hotel_stars'=>0, 'room'=>0, 'meal'=>0, 'included'=>1, 'transport'=>1, 'price_min'=>0, 'price_max'=>0, 'options'=>0)); break; case 'event-ticket': $allowed_tags = array_merge($allowed_tags, array('name'=>1, 'place'=>1, 'hall'=>0, 'hall_part'=>0, 'date'=>1, 'is_premiere'=>0, 'is_kids'=>0)); break; default: $allowed_tags = array_merge($allowed_tags, array('name'=>1, 'vendor'=>0, 'vendorCode'=>0)); break; } $allowed_tags = array_merge($allowed_tags, array('aliases'=>0, 'additional'=>0, 'description'=>0, 'sales_notes'=>0, 'promo'=>0, 'manufacturer_warranty'=>0, 'country_of_origin'=>0, 'downloadable'=>0, 'adult'=>0, 'barcode'=>0)); $required_tags = array_filter($allowed_tags); if (sizeof(array_intersect_key($data, $required_tags)) != sizeof($required_tags)) { return; } $data = array_intersect_key($data, $allowed_tags); // if (isset($data['tarifplan']) && !isset($data['provider'])) { // unset($data['tarifplan']); // } $allowed_tags = array_intersect_key($allowed_tags, $data); // Стандарт XML учитывает порядок следования элементов, // поэтому важно соблюдать его в соответствии с порядком описанным в DTD $offer['data'] = array(); foreach ($allowed_tags as $key => $value) { $offer['data'][$key] = $this->prepareField($data[$key]); } //$this->offers[] = $offer; return $offer; } /** * Фрмирование элемента * * @param array $attributes * @param string $element_name * @param string $element_value * @return string */ private function getElement($attributes, $element_name, $element_value = '') { $retval = '<' . $element_name . ' '; foreach ($attributes as $key => $value) { $retval .= $key . '="' . $value . '" '; } $retval .= $element_value ? '>' . $this->eol . $element_value . '</' . $element_name . '>' : '/>'; $retval .= $this->eol; return $retval; } /** * Преобразование массива в теги * * @param array $tags * @return string */ private function array2Tag($tags) { $retval = ''; foreach ($tags as $key => $value) { $retval .= '<' . $key . '>' . $value . '</' . $key . '>' . $this->eol; } return $retval; } /** * Преобразование массива в теги параметров * * @param array $params * @return string */ private function array2Param($params) { $retval = ''; foreach ($params as $param) { $retval .= '<param name="' . $this->prepareField($param['name']); if (isset($param['unit'])) { $retval .= '" unit="' . $this->prepareField($param['unit']); } $retval .= '">' . $this->prepareField($param['value']) . '</param>' . $this->eol; } return $retval; } /** * Подготовка текстового поля в соответствии с требованиями Яндекса * Запрещаем любые html-тэги, стандарт XML не допускает использования в текстовых данных * непечатаемых символов с ASCII-кодами в диапазоне значений от 0 до 31 (за исключением * символов с кодами 9, 10, 13 - табуляция, перевод строки, возврат каретки). Также этот * стандарт требует обязательной замены некоторых символов на их символьные примитивы. * @param string $text * @return string */ private function prepareField($field) { $field = htmlspecialchars_decode($field); $field = strip_tags($field); $from = array('"', '&', '>', '<', '\''); $to = array('&quot;', '&amp;', '&gt;', '&lt;', '&apos;'); $field = str_replace($from, $to, $field); //if ($this->from_charset != 'windows-1251') { // $field = iconv($this->from_charset, 'windows-1251//IGNORE', $field); //} $field = preg_replace('#[\x00-\x08\x0B-\x0C\x0E-\x1F]+#is', ' ', $field); return trim($field); } protected function getPath($category_id, $current_path = '') { if (isset($this->categories[$category_id])) { $this->categories[$category_id]['export'] = 1; if (!$current_path) { $new_path = $this->categories[$category_id]['id']; } else { $new_path = $this->categories[$category_id]['id'] . '_' . $current_path; } if (isset($this->categories[$category_id]['parentId'])) { return $this->getPath($this->categories[$category_id]['parentId'], $new_path); } else { return $new_path; } } } function filterCategory($category) { return isset($category['export']); } } ?>
  21. Здравствуйте! Я сам занимаюсь разработкой сайтов (рисование, вёрстка, немного программирования...) Но парсер - для меня дремучие дебри... поэтому абсолютно не знаю цен и сколько трудочасов может уйти. Надеюсь на честное предложение! Так что предлагайте! Ещё я тупанул, не в той теме запостился... у меня диг не 3, а 1.5.4.1
  22. Помогите найти! Если найти не получится, кто возьмётся разработать модуль? У меня небольшой магазин спортивного питания, примерно 500 ед товаров, может будет больше. Пока я конкурирую только с 4-5 магазинами в своём городе. У них есть сайты и точно такие же товары... товары располагаются по статичным url, где есть фото, цена, описание... Мне нужно, чтобы заходя в карточку товара (в админке) было соседнее поле, где через запятую были прописаны фавикон конкурента и его цена на этот товар. Принцип работы мне представляется такой: в карточке товара имеются поля, куда можно прописать url сайтов конкурентов на этот товар... парсер запускается по крону и обновляет данные - фавиконку и цену конкурента. Фавиконка нужна для идентификации конкурента с максимальной экономией пространства.

×
×
  • Створити...

Important Information

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