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

Yesvik

Ветеран сообщества
  
  • Posts

    1,939
  • Joined

  • Last visited

Everything posted by Yesvik

  1. Скачать / Купить дополнение Устранение дублей страниц товаров и категорий URL товаров и категорий всегда формируется с учетом иерархии категорий. Для этого в разделе "Связи" товара сделаны изменения позволяющие указать одну категорию товара, относительно которой и будет строиться URL, и список категорий в которых этот товар будет отображаться. (смотри скриншот) URL товаров и категорий проверяются, запросы с неправильной иерархией (дублирующие основной URL страницы) переадресовываются со статусом 301 Moved Permanently на URL сформированный с учетом заданной иерархии категорий. Если URL построен с неправильной иерархией - URL будет исправлен, например, у товара URL /desktops/mac/imac/, а пришел запрос /desktops/imac/, /mac/imac/, /mac/desktops/imac/ или просто /imac/ то URL будет исправлен. Но если в URL будут категории которых вообще нет, например /desk/tops/mac/imac/, или не правильно указан товар /desktops/mac/ciam/ будет выведена страница ошибки с текстом "Запрашиваемая страница не найдена!" и статусом 404 Not Found. Такое-же поведение с категориями... Если для построения ЧПУ не хватает какого-то псевдонима - URL строится GET параметрами, при этом параметр path, который отвечает за иерархию категорий, всё равно контролируется и формируется с учетом заданной иерархии категорий. Алгоритмы формирования и контроля URL используют кеширование, так что в большинстве случаев нагрузка на базу даже ниже чем у штатного алгоритма формирования ЧПУ. Даже при холодном старте... 09 апреля 2011 перезалил архив. Добавлен контроль ссылок со слешем и без в конце URL, теперь /desktop/mac/imac/ и /desktop/mac/imac расцениваются как разные. 6 мая 2011 добавлена возможность выбора формата построения URL для страниц товара: /category/subcategory/product или /product При выборе построения URL /product хлебные корошки и меню формируются с учетом полного пути к товару (с категориями/подкатегориями) Изменения в файлах ocStore версии 0.2.0 Файл: admin/controller/setting/setting.php =================================================================== находим 'config_seo_url_auto','config_seo_url_replace', заменяем на 'config_seo_url_include_path','config_seo_url_postfix', Файл: admin/language/russian/setting/setting.php =================================================================== находим $_['entry_seo_url'] = 'Использование SEO-url:<span class="help">Необходимо настройть файл .htaccess в корневом каталоге магазина</span>';$_['entry_seo_url_auto'] = 'Автоподстановка окончаний SEO-url:<span class="help">Добавляет / в конце УРЛ</span>';$_['entry_seo_url_replace'] = 'Заменять пробелы на "_" в SEO-url:'; заменяем на $_['entry_seo_url'] = 'Использовать SEO-url:<span class="help">Необходимо настройть .htaccess в корневом каталоге магазина</span>';$_['entry_seo_url_include_path'] = 'SEO-url товаров с категориями:<span class="help">/category/subcategory/product</span>';$_['entry_seo_url_postfix'] = 'Окончание ЧПУ:<span class="help">Например / или .html</span>'; Файл: admin/view/template/setting/setting.tpl =================================================================== находим <tr> <td><?php echo $entry_seo_url_auto; ?></td> <td><?php if ($config_seo_url_auto) { ?> <input type="radio" name="config_seo_url_auto" value="1" checked="checked" /> <?php echo $text_yes; ?> <input type="radio" name="config_seo_url_auto" value="0" /> <?php echo $text_no; ?> <?php } else { ?> <input type="radio" name="config_seo_url_auto" value="1" /> <?php echo $text_yes; ?> <input type="radio" name="config_seo_url_auto" value="0" checked="checked" /> <?php echo $text_no; ?> <?php } ?></td></tr> заменяем на <tr> <td><?php echo $entry_seo_url_include_path; ?></td> <td><?php if ($config_seo_url_include_path) { ?> <input type="radio" name="config_seo_url_include_path" value="1" checked="checked" /> <?php echo $text_yes; ?> <input type="radio" name="config_seo_url_include_path" value="0" /> <?php echo $text_no; ?> <?php } else { ?> <input type="radio" name="config_seo_url_include_path" value="1" /> <?php echo $text_yes; ?> <input type="radio" name="config_seo_url_include_path" value="0" checked="checked" /> <?php echo $text_no; ?> <?php } ?></td></tr> находим <tr> <td><?php echo $entry_seo_url_replace; ?></td> <td><?php if ($config_seo_url_replace) { ?> <input type="radio" name="config_seo_url_replace" value="1" checked="checked" /> <?php echo $text_yes; ?> <input type="radio" name="config_seo_url_replace" value="0" /> <?php echo $text_no; ?> <?php } else { ?> <input type="radio" name="config_seo_url_replace" value="1" /> <?php echo $text_yes; ?> <input type="radio" name="config_seo_url_replace" value="0" checked="checked" /> <?php echo $text_no; ?> <?php } ?></td></tr> заменяем на <tr> <td><?php echo $entry_seo_url_postfix; ?></td> <td><input type="text" name="config_seo_url_postfix" value="<?php echo $config_seo_url_postfix; ?>" size="3" /></td></tr> Файл: catalog/controller/common/seo_url.php заменям полностью Файл: catalog/model/tool/seo_url.php заменям полностью P.S. SeoPack решил удалить потому что многих пугает большое количество изменённых файлов, не разбираясь что в основной массе файлов изменения были связаны с заменой & на & для валидации по XHTML стандарту. Позже напишу описание и выложу SEO URL Manager отдельно. Добавил Yesvik Добавлено 06.04.2011 Категория Прочее  
  2. Надо-бы немного математики добавить... на те случаи когда превьюха за границы экрана уходит.
  3. https://opencartforum.com/topic/2332-настройка-поиска-и-удаление-дубля-ссылок/page__view__findpost__p__15686
  4. Первый вариант полностью полагается на стандартный метод получения списка товаров. Если в дальнейшем что-то изменится, например в структуре данных, тебя это не волнует - метод сформирует и вернёт тебе список. Минус этого варианта в том что если у тебя много товаров с нулевым количеством эти товары будут в списке. Т.е из базы будет извлекаться большой объём данных которые не будут использованы.Второй вариант извлечёт из базы только те товары которые нужны для построения элементов offer, но если изменится структура данных надо будет вносить изменения в этот запрос. Как по мне - второй вариант лучше. Я об этом намекал - "По хорошему надо написать запрос с проверкой количества" И ещё... Времени не было и я к существующему запросу добавил условие на количество. Немного освобожусь и займусь допиливанием выгрузки на ЯМ, тогда и построю запрос полегче.
  5. Готового метода получения списка товаров имеющихся в наличии в OpenCart я не нашёл.По хорошему надо написать запрос с проверкой количества, но самый простой метод решения этой задачи - проверять количество при формировании элементов offer В файле catalog/controller/export/yml.php найди строку foreach ($products as $product) {и после этой строки добавь такую строку if (!$product['quantity'] > 0) continue; Если есть желание решить эту задачу на уровне SQL запроса - то в файле catalog/controller/export/yml.php вместо $products = $this->model_catalog_product->getProducts();надо написать $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, wcd.unit AS weight_class FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "stock_status ss ON (p.stock_status_id = ss.stock_status_id) LEFT JOIN " . DB_PREFIX . "weight_class_description wcd ON (p.weight_class_id = wcd.weight_class_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p.status = '1' AND p.quantity > 0"); $products = $query->rows;
  6. В 9 столбце строки 71 заканчивается элемент offer... но дело не в этом.Дело в том что схема позволяет или vendor,vendorCode?,model или name,vendor?,vendorCode? Другими словами name и model вместе не живут. Для твоих товаров, мне кажется, больше подходит name,vendor?,vendorCode Измени <model></model> на <vendorCode></vendorCode> И ещё... В name элемента shop должно быть не более 20 символов, а у тебя в name 37 символов. Думаю надо в админке сделать ввод для поля name, как для company.
  7. Действительно, я с курсами начудил... выводил обратную величину.В файле catalog/controller/export/yml.php найди строку (у меня это строка № 31) $output .= '<currency id="' . $currency['code'] . '" rate="' . number_format ($this->currency->convert($currency['value'], $offers_currency, $shop_currency), 4, '.', '') . '"/>' . $eof;и измени её вот так $output .= '<currency id="' . $currency['code'] . '" rate="' . number_format (1/$this->currency->convert($currency['value'], $offers_currency, $shop_currency), 4, '.', '') . '"/>' . $eof;
  8. Я упустил этот момент, исправлю так что-бы нельзя было выбрать USD и EUR. Какая валюта указана в Система->Настройка->Размещение->Валюта?Какая валюта указана по умолчанию в Система->Локализация->Валюты? Это мулька ЯМ. При слишком значительном (больше 30%) отличии значения курса валюты от курса ЦБ РФ или НБУ информационные материалы считаются невалидными.
  9. Править еще не закончил, но этот вариант гораздо лучше текущегоАрхив распаковать в корень, в админке прописать валюту и компанию. В .htaccess послеRewriteBase / добавить RewriteRule ^ya.yml$ index.php?route=export/yml [L] yml.zip
  10. Дай ссылку на магазин, попробую разобраться.
  11. Нужно смотреть что в 41 строке сгенерённого файла Судя по коду ты вряд-ли найдёш "у кого нормально работает"...
  12. Согласен, если переписывать все запросы то это будет уже не OpenCart... Как ни крути, есть только два варианта: сделать самому как считаеш нужным или ждать пока кто-то напишет модуль с кнопкой "Сделать крутой магазин" :)
  13. Отчасти такую озабоченность поможет решить mysqli... не уверен в чужом коде? некогда вычитывать? - ставь на входе IDS и вычитывай код по мере возможности... Идеальных решений я не знаю. Думаю что их нет.
  14. Товарам из категроии "PC" устанавливаеш категории "Мониторы" и "PC"Товарам из категроии "Mac" устанавливаеш категории "Мониторы" и "Mac" ну и так далее...
  15. Если я правильно понял - предлагается выяснить количество записей, потом сгенерить рандомом 10 product_id из интервала от 1 до COUNT и потом выдернуть из БД эти товары по product_id...Этот вариант не так прост как кажется на первый взгляд.
  16. /** * Подготовка текста в соответствии с требованиями Яндекса * Запрещены любые html-тэги. Стандарт XML не допускает использования в текстовых данных * непечатаемых символов с ASCII-кодами в диапазоне значений от 0 до 31 (за исключением * символов с кодами 9, 10, 13 - табуляция, перевод строки, возврат каретки). Также этот * стандарт требует обязательной замены некоторых символов на эквивалентные им символьные * примитивы. * @param string $text * @return string */ function ymlTextPrepare($text) { $text = htmlspecialchars_decode(trim($text)); $text = strip_tags($text); $search = array('"', '&', '>', '<', '\''); $replace = array('"', '&', '>', '<', '''); $text = str_replace($search, $replace, $text); $text = preg_replace('#[\x00-\x08\x0B-\x0C\x0E-\x1F]+#is', ' ', $text); return trim($text); } И ещё...Элементы <description> или <name> могут содержать текст длиной не более 255 символов. Если длина описания выходит за пределы допустимого значения, то текст обрезается и в конце ставится многоточие.
  17. В магазине возникает событие которое он пытается записать в system/logs/error.txt, а при попытке открыть файл system/logs/error.txt получает отлуп из-за отсутствия соответствующих прав. Вторая и третья запись - это следствие ошибки описанной в первой строке.Зачастую достаточно дать права на запись для system/logs/error.txt CHMOD 0664 или 0666 и жизнь наладится, но бывают хостинги с параноидальными настройками безопасности и тогда надо смотреть настройки сервака... ибо лениво расписывать все возможные варианты.
  18. Мой ответ по поводу хранения идентификатора корзины в куках, а самой корзины на стороне сервера был дан как техническое решение поставленной задачи. А вот надо-ли эту задачу решать - это другой вопрос. Поведение OpenCart по отношению к анонимному пользователю абсолютно правильное. Хочеш быть анонимным - терпи все прелести анонимности до конца. Хочеш комфорта - авторизуйся и тебя будут помнить, облизывать со всех сторон и т.д
  19. Не совсем понятно о каком UID идёт речь. Если имеется в виду mod_uid апача или аналогичный трекер, то эти приблуды есть далеко не на всех серверах и используются для сбора статистики на уровне сервера. Идентифицировать пользователя по таким идентификаторам я бы не стал. Кроме этого думаю что анонимный пользователь не сильно обрадуется если кто-то после него зайдёт на сайт с его компа и сможет посмотреть его корзину. По идее корзина должна удаляться как только протухнет его сессия, на то он и анонимный пользователь.
  20. В куках хранить идентификатор корзины, а как хранить на стороне сервера саму корзину уже не важно. И вообще пора-бы сделать хранение сессий в базе. Не так редки случаи когда на виртуальных серверах сессии хранят в общей куче и нежданные гости не исключены.
  21. Если тебя не напрягает время потраченное на импорт/экспорт, хостинг не ругается, скрипт не обламывается - значит товаров мало.
  22. Если после импорта контент который был до этого не изменяется, а только добавляется новый, товаров не много и импорт проходит быстро, при этом хостер не пинает за высокую нагрузку - то никому от этого плохо не будет.
  23. Посетителю по барабану по какому URL открывется страница товара, весь сыр-бор из-за поисковиков которые понижают в выдаче за это.
  24. Не понятно что означает один и тот-же URL, но с разными параметрами?Если разные параметры - это уже разные URL, правда поисковикам можно в robots.txt через директиву Clean-param указать какие параметры игнорировать
×
×
  • 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.