lakbor

Пользователи
  • Число публикаций

    70
  • Регистрация

  • Последнее посещение

  • Дней в топе

    2

lakbor последний раз побеждал 7 Ноября 2016

lakbor - автор самых популярных публикаций!

Репутация

45 Очень хороший

1 подписчик

О lakbor

  • Звание
    Пользователь

Информация

  • Пол
    Мужчина
  • Город:
    Москва

Недавние посетители профиля

2 062 просмотра профиля
  1. Доброго всем дня! По просьбам трудящихся выкладываю код для OC второй версии) Скачал: ocStore 2.1.0.2.1 Во-первых, сразу предупреждаю: ВНИМАНИЕ! Все изменения, вносимые в код вы делаете на свой страх и риск, все файлы советую бэкапить, В ТОМ ЧИСЛЕ БАЗУ ДАННЫХ! Во-вторых, этот код писался под мой любимый ocStore, поэтому для чистого Opencart и его просто русифицированных версий будет отличаться. Итак, во-первых, как и раньше, лезем в файл: /admin/controller/catalog/category.php там перед последней фигурной скобкой } вставляем следующий код: /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public function my_copy() { $this->load->language('catalog/category'); $this->document->setTitle($this->language->get('heading_title')); $this->load->model('catalog/category'); if (isset($this->request->post['selected'])) { foreach ($this->request->post['selected'] as $category_id) { $this->my_copycat($category_id); } } $this->getList(); } private function my_copycat($cid) { // GET LAST CID $query_id = $this->db->query("SELECT * FROM " . DB_PREFIX . "category;"); $last_cid=0; foreach ($query_id->rows as $qqqq) { if ($last_cid < (int)$qqqq['category_id']) { $last_cid = (int)$qqqq['category_id']; } } ++$last_cid; // 1-st QUERY ('category' DB) $qq = "SELECT * FROM " . DB_PREFIX . "category WHERE category_id = " . $cid . ";"; $query = $this->db->query($qq); $my_category = array(); foreach ($query->rows as $qqqq) { foreach ($qqqq as $mkey => $mval) { if ($mval == '') { $my_category[$mkey] = 'NULL'; } else { $my_category[$mkey] = $mval; } } } // 2-nd QUERY ('category_description' DB) $qq = "SELECT * FROM " . DB_PREFIX . "category_description WHERE category_id = " . $cid . ";"; $query = $this->db->query($qq); $my_category_description = array(); $j=0; foreach ($query->rows as $qqqq) { foreach ($qqqq as $mkey => $mval) { if ($mval == '') { $my_category_description[$j][$mkey] = 'NULL'; } else { $my_category_description[$j][$mkey] = $mval; } } $j++; } // 3-rd QUERY ('category_to_store' DB) $qq = "SELECT * FROM " . DB_PREFIX . "category_to_store WHERE category_id = " . $cid . ";"; $query = $this->db->query($qq); $my_category_to_store = array (); foreach($query->rows as $qqqq){ foreach ($qqqq as $mkey => $mval) { $my_category_to_store[$mkey] = $mval; } } // READING ENDED // READING ENDED // READING ENDED // WRITING TO DATABASE!!! // WRITING TO DATABASE!!! // WRITING TO DATABASE!!! //INS 1st ARRAY $qs = ', '; $qq_values = $last_cid . $qs . '\'' . $my_category['image'] . '\''. $qs . $my_category['parent_id'] . $qs . $my_category['top'] . $qs . $my_category['column'] . $qs . $my_category['sort_order'] . $qs . $my_category['status'] . ', \'' . $my_category['date_added'] . '\', \'' . $my_category['date_modified'] . '\''; $qq = 'INSERT INTO ' . DB_PREFIX . 'category (`category_id` ,`image` ,`parent_id` ,`top` ,`column` ,`sort_order` ,`status` ,`date_added` ,`date_modified`) VALUES (' . $qq_values . ');'; $query = $this->db->query($qq); //INS 2nd ARRAY $li = 0; $qs = ', '; while ($li < sizeof($my_category_description)) { $qq_values = $last_cid . $qs . $my_category_description[$li]['language_id'] . ', \'' . $my_category_description[$li]['name'] . '\', \'' . $my_category_description[$li]['description'] . '\', \'' . $my_category_description[$li]['meta_description'] . '\', \'' . $my_category_description[$li]['meta_keyword'] . '\', \'' . $my_category_description[$li]['meta_title'] . '\', \'' . $my_category_description[$li]['meta_h1'] . '\''; $qq = 'INSERT INTO ' . DB_PREFIX . 'category_description VALUES (' . $qq_values . ');'; $query = $this->db->query($qq); $li++; } //INS 3rd ARRAY $qq = 'INSERT INTO ' . DB_PREFIX . 'category_to_store VALUES (' . $last_cid . ', ' . $my_category_to_store['store_id'] . ');'; $query = $this->db->query($qq); // WRITING COMPLETED!!! // WRITING COMPLETED!!! // WRITING COMPLETED!!! } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Далее, в этом же файле перед: $data['add'] = $this->url->link('catalog/category/add', 'token=' . $this->session->data['token'] . $url, 'SSL'); вставляем: $data['copy'] = $this->url->link('catalog/category/my_copy', 'token=' . $this->session->data['token'], 'SSL'); Теперь переходим к файлу: /admin/view/template/catalog/category_list.tpl В нём, в самом начале после: <div class="page-header"> <div class="container-fluid"> <div class="pull-right"> Вставляем: <a onclick="$('#form-category').attr('action', '<?php echo $copy; ?>'); $('#form-category').submit();" class="btn btn-warning"><?php echo 'Copy Category'; ?></a> Класс кнопки может быть вместо btn-warning следующим: btn-default (белая) btn-primary (синяя) btn-success (зелёная) btn-info (голубая) btn-warning (желтая) btn-danger (красная) btn-link (в виде ссылки) Вот, собственно, и всё. Ещё раз - делайте бэкапы! May the Force be with you! P.S. Также поступило предложение заморочиться, чтобы копировалась не только сама категория, но и рекрсивно все подкатегории. Что ж, как будет время реализую) P.P.S. Весь мусорный отладочный выврд убрал, код работает чисто.
  2. Рискну предположить, что будет примерно так: Вариант с разметкой под Bootstrap: <?php if ($attribute_groups) { ?> <div class="row"> <?php $cc = count($attribute_group['attribute']) / 2; $slice1 = array_slice($attribute_group['attribute'], 0, $cc); $slice2 = array_slice($attribute_group['attribute'], $cc); ?> <div class="col-sm-6"> <?php foreach ($slice1 as $attribute) { ?> <!--1й столбец--><?php echo $attribute['name']; ?> <?php echo $attribute['text']; ?><br /><!-- /1й столбец--> <?php } ?> </div> <div class="col-sm-6"> <?php foreach ($slice2 as $attribute) { ?> <!--2й столбец--><?php echo $attribute['name']; ?> <?php echo $attribute['text']; ?><br /><!-- /2й столбец--> <?php } ?> </div> </div> <?php } ?>
  3. 1. не за что) 2. странно, что раньше не было, хром всегда так отображает, но при этом он показывает (у меня) нормальную красивую структуру, а вот ФФ не церемонится и выдаёт как есть сплошным текстом) если что - вывод можно проверить на сайте http://bertal.ru/ там отметьте галочку "показать хтмл-код страницы" и увидите натуральный вывод AS-IS, так сказать
  4. Это реакция Хрома, не переживайте, всё норм выводится
  5. В файле: /catalog/language/_ЯЗЫК_/product/product.php $_['tab_attribute'] PS pardon me, эт не те характеристики xD
  6. Картинка вызывается не через ксс, а как видно по скрину - напрямую из хтмл Вам нужно отыскать что генерирует блок "swiper-wraper". в его шаблоне или настройках смотрите. Либо в ксс напишите что-то типа: .swiper-wraper{ display: none; }
  7. Добрый день фон по адресу: http://fitoland.shop/image/cache/catalog/slide-1-2050x740.jpg Вариант либо отключить этот swiper-slide, либо выставить в css z-index выше этой картинки
  8. Посмотрите прописаны ли чпу в таблице url_alias. Например для OpenCart по умолчанию НЕ ПРОПИСАНЫ урлы для стандартных вещей типа корзины, оформления заказов, аккаунта и т.д. Это реализовано пока что только в СеоПро (добавление этого контента при установке)
  9. Насчёт дублей это скорее одному СЕОшнику известно) код писался под СЕО цели, и не вижу проблем с дублями, увы. Идея как раз и была в том, чтобы избавиться от дублей, при этом имея указанную выше вложенность. То есть, на примере тех же Ауди-БМВ: у нас есть страница /brands/audi (/product/manufacturer/info) - там инфо о бренде и все товары к нему привязанные; ещё у нас есть страница в каталоге /cataдogue/audi - на ней уже информация о запчастях, рассортированная по понятным категориям (кузов, подвеска и т.д.) а ещё добавим (для примера, так-то идея плохая)) /catalogue/akcii/audi - сюда разместим акции на товары для Ауди ну и ещё можно написать статьи по чему-либо, связанному с Ауди: /statii/audi По сути сейчас такая вложенность делается через прибавление циферок 1,2,3 и так до бесконечности) [ну или как в престашопе добавлением ID ко всему, что движется] Точнее не уникальная страница, а одна и та же, а вот в моем модуле как раз таки уникальная в зависимости от вложенности) хотя смотря что считать уникальным))) Решал конкретную задачу, и, как показала практика, решил) Насчёт понадобится - не понадобится. Ради этого вопроса пост и писался. Как я вижу проблему: по работе регулярно требуется реализовать подобную структуру, другое дело что большинство сайтов на другой CMS, у которой нет пунктика насчёт уникальности alias на всю систему. Пришёл магазин на OpenCart и вот пошло-поехало) Если действительно никому нафиг не будет нужно сиё творение, без вопросов закроем тему - буду кататься на велике сам Спасибо, приму к сведению
  10. Эти пару строк я дёрнул из SeoPro, дабы не изобретать велосипед с перенаправлениями и не обратил внимания... Если я правильно понимаю, то можно просто заменить константу на HTTPS_SERVER, и тогда в случае если сайт на ssl, адрес получится с https, а если без ssl, то с обычным http. (у меня по-крайней мере в конфиге в обеих константах адрес с http:// забит => моя теория должна работать)) Спасибо за замечание, проверю как смогу и в след версии поправлю.
  11. хмм, а кто ж меня знает, впервые тему на форуме создаю, напутал наверн... давайте переместим куда следует)
  12. Приветствую вас, товарищи форумчане! У меня по рабочей необходимости родился сео-модуль, решающий важную, как мне кажется, задачу. Он позволяет создавать (отображать точнее) вложенности с одинаковыми alias. Например: Разные категории с одинаковыми alias: http://localhost/catalogue/audi/kapoty http://localhost/catalogue/bmw/kapoty http://localhost/catalogue/mercedes/kapoty Или вдобавок к ним страницы брендов: http://localhost/brands/audi http://localhost/brands/bmw http://localhost/brands/mercedes Почему я написал этот модуль? На момент работы над одним сайтом потребовались одинаковые подкатегории в разных родительских. Сначала думал подправить SeoPro, но посмотрел как в нём устроено кэширование и всё остальное, и решил, что переписывать придётся слишком много, я запутаюсь в коде, и ничем хорошим это не кончится. Итак, этот модуль выдаёт тот же результат, что и SeoPro при обычных обстоятельствах, а при наличии одинаковых alias - не очкует и показывает нужную страницу)) Работает с той же колонкой, что и SeoPro: main_category (для совместимости двух модулей решил не вводить ничего лишнего в БД) Алгоритм отличается как от SeoUrl, так и от SeoPro. В планах доработать следующие моменты: Хлебные крошки выводят, так сказать, канонический путь, а не тот по которому шёл клиент. Я считаю это неправильным, и исправлю в скором времени. У модуля нет установщика, а это ни разу не круто. Но модуль ещё сырой, простим ему это. Хочу сделать красивую админ.страницу для настроек модуля, а они обязательно понадобятся. Сейчас кэширование производится в одном файле, хочу сделать два, так будет правильнее. Не реализовано добавление / изменение чпушек с одинаковыми alias в админке, пока что только через БД. Скоро перепишу код проверки. Установка: 1. скопировать seo_bro.php в папку /content/controller/common/ 2. скопировать файл pagination.php в /system/modification/system/library/ * pagination.php это отредактированный родной файл - там убраны дубли первой страницы пагинации ( ?page=1 - когда находишься дальше первой страницы) - необязательный файл, просто тогда останутся несколько дублей Чтобы присвоить категориям одинаковые alias, сначала нужно их сохранить под разными, а потом в БД подправить на одинаковые. Знаю, пока просто не дописал эту часть. Не кидайте только в меня помидорками - я в процессе переработки фильтра полей при заполнении поля, идущего в url_alias. Потестить вы и так сможете, ну или подождите пока допишу (пишу во нерабочее время, поэтому долго). Активация: В той сборке, для которой изначально создавался модуль ( а он пока не тестировался на других:( ), он включался влоб, в index.php: // SEO URL's $controller->addPreAction(new Action('common/seo_bro')); Если же всё-таки версия ocStore, то там это дело вкл в БД, либо в контроллере админки надо приписать по аналогии с SeoPro *Ещё раз подчёркиваю, что версия сырая, на любителя) но если проявите интерес и подождёте, то я таки превращу эту штуковину в конфетку. Итак, чего я, собственно, тут хочу) Прошу камрадов потестить модуль, сказать нужен ли он вообще сообществу, стоит ли допиливать его до полноценного продукта, который не стыдно в раздел Дополнения запихнуть) К критике отношусь спокойно, просто будьте вежливыми. Сайт, на котором проводилось тестирование, к сожалению, работает на OpenCart 2.1._что-то-там_ (а не на ocStore). SeoPro был установлен владельцем сайта, соответственно в админке уже было поле "Главная категория" у продукта и столбец main_category в БД. Больше всего интересует нужно ли вообще это чудо сообществу (если да, то я впихну со временем туда кучу плюшек типа массового редактирования main_category, url_alias и некоторых настроек модуля типа кнопок сброса, вкл/откл кэша и т.д.) Ах да, совсем забыл! Модуль я назвал SeoBro)) Спасибо за внимание! pagination.php seo_bro.php