COVID2019 и это вот все. Друзья, вся эта история начинает плохо пахнет. Мойте руки, не ходите в люди. Отложите все плановые покупки и положите в носок заначку. Заприте ваших родителей, бабушек-дедушек на даче. Лучше перебдеть чем недобдеть. Берегите себя!

savage4pro

Модераторы
  • Публикации

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

  • Посещение

  • Days Won

    74

Все публикации пользователя savage4pro

  1. шаблон товара здесь catalog/view/theme/ваша_тема/template/product/product.tpl рекомендую все же создать новую тему и в нее поместить только те файлы шаблонов, которые вами меняются, а дефолтный бы не трогал js здесь catalog/view/javascript/common.js если будете создавать мультистор, имеет смысл для отдельных тем подключать дополнительно свои js-скрипты, так же, как и css по теме если нужно, чтобы посетители без JS не страдали, то стоит убрать style="display:none" а прятать блок с текстом описания самим js-ом ну и чтобы сохранить функциональность, то и тыркать надо заставлять не на <li>, а на <a>, и у целевых тэгов не атрибут contentsItem добавлять, а все же id и в этом случае надо по click'у в ссылку элемента содержания запрещать js-ом переход по ней: event.preventDefault(); вот, тогда все будут довольны, без JS - просто прыгнет на нужное место, с JSом отобразит текст и плавно съедет всех благ
  2. решение на коленке примерно следующее 1. в описании статьи втыкаете куда хотите заголовки типа <h3 class="articleContents">Пункт содержания</h3> в шаблоне пишете что-то вроде такого (чуть подправил preg_match_all 2015-10-27 09:57) $contentsClass = "articleContents";//preg_match_all("%(<h[0-9].*class\=\"".$contentsClass."\"[^>]*)>(.*)</h[^>]+>%U",$description,$matches,PREG_SET_ORDER);preg_match_all("%(<h[0-9].*class\=\"".$contentsClass."\"[^>]*)>([^<]+)</h[^>]+>%Uis",$description,$matches,PREG_SET_ORDER);$contentsList = array();$replaceFrom = array();$replaceTo = array();if (!empty($matches)) { foreach($matches as $idx => $contentsItem) { $iterated = ' contentsItem="idx-'.$idx.'"'; $replaceFrom[] = $contentsItem[0]; $replaceTo[] = str_replace($contentsItem[1],$contentsItem[1].$iterated,$contentsItem[0]); $contentsList[] = '<li contentsTarget="idx-'.$idx.'">'.trim(strip_tags($contentsItem[2])).'</li>'; }}$contents = '';if (!empty($contentsList)) { $contents = "\n\n<ul class=\"contents-list\">\n".implode("\n",$contentsList)."\n</ul>\n\n";}if (!empty($contents) && !empty($replaceFrom) && !empty($replaceTo)) { $description = '<div class="hiddenArticleDescription" style="display:none">'.str_replace($replaceFrom,$replaceTo,$description).'</div>';}echo '<div class="description-wrap">'.$contents.$description.'</div>';2. в JS примерно такую конструкцию jquery var gotoProcess = false;$('ul.contents-list>li').click(function() { if (gotoProcess == false) { gotoProcess = true; var descel = $(this).closest('.description-wrap').find('.hiddenArticleDescription'); if (descel.is(":visible") == false) { descel.show(); } var tgt = descel.find('[contentsItem="' + $(this).attr('contentsTarget') + '"]').first(); $('html, body').animate({ scrollTop: tgt.offset().top }, 500, function() { gotoProcess = false; }); return false; }});в стилях уж наверное оформите как-нибудь
  3. одни никарагуанцы ничего не скажут и молча оставят на всякий случай гондурас
  4. и в хроме все плохо, и где угодно первое (обязательное) - для применения якоря, давайте в ссылке весь адрес от вашего <base href="http://fillheat.ru/" /> либо уберите base вовсе, а в ссылке указывайте просто "#anchor" второе (крайне желательное) - если уж используете id, они должны быть уникальны, и начинаться с буквы латинского алфавита
  5. внес изменения в мод, теперь бутстрап не нужен для 1.5 есть соответствующий мод
  6. Замена символа рубля vQmod Требуется vQmod версии 2.4.1 (идет в комплекте с ocshop 1.5.6.4.1). Отличия от версии для 2.x проверка таблицы (в случае отсутствия таблицы - создание, если пустая - заполнение) при каждом вызове конструктора класса Currency обрезка тэгов символов валют в input'е над ползунком coolfilter (если есть) процесс установки Установка: скопируйте содержимое папки "upload" в корень вашего сайта удалите файлы "/vqmod/vqcache/vq2-*" зайдите в панель администратора и очистите кэш vqmod и системный В случае некорректного отображения блока с форматированной ценой (например, вылезающие закрывающие теги вида: руб." />") необходимо в шаблоне, где эта цена выводится, оборачивать её вывод в strip_tags(); Автор savage4pro Добавлен 24.10.2015 Категория 1.5.x Opencart Скачать Замена символа рубля vQmod vqmod_pt-sans-ruble-symbol.zip
  7. кашу маслом базу индексами не испортишь, по принципу - есть выборка, неплохо бы иметь под нее индекс он бесполезен не из-за отсутствия смысла при выборке 3 строк (можно наполнить и сотнями одинаковых кодов десятков валют с нулевым статусом, мало ли кто как хранит их, а потом страдает), а из-за самой идеи запроса в дефолтном исполнении, там один хрен все строки перебираются кстати о кэше ModelLocalisationCurrency кэш использует Currency - нет по остальному даже и спорить не с чем, что ж, идея прекрасна брошу камешек в оригинальный опенкарт выборка в ModelLocalisationCurrency->getCurrencyByCode (это которая "SELECT DISTINCT *..." по `code`) при отсутствии уникальности поля `code` имеет все шансы выбирать что попало
  8. пасиб да, денормализация в виде слегка усложненных запросов с джойном дополнительной таблицы имеет место быть, мод для своей работы добавляет свою таблицу по-хорошему, кончено, индекс на `oc_currency`.`code` надо повесить, но решил в окончательном варианте структуру дефолтных таблиц БД оставить нетронутой файлы ядра, естественно, не перезаписывает, как и предписано вку/окмодам
  9. указывать вместе с доменным именем сайта, что не всегда приемлимо с произвольными ссылками в меню пока, к сожалению, все не совсем так, как хотелось бы поэтому временно (до выхода обновления по меню) для себя решил данную задачу изменением шаблона, в котором оно выводится например, в дефолтном шаблоне оно выводится в /catalog/view/theme/default/template/common/header.tpl мое решение такое заменить <?php foreach ($categories as $category) { ?> <?php if ($category['children']) { ?> <li class="dropdown"><a href="<?php echo $category['href']; ?>" class="dropdown-toggle" data-toggle="dropdown"><?php echo $category['name']; ?></a> <div class="dropdown-menu"> <div class="dropdown-inner"> <?php foreach (array_chunk($category['children'], ceil(count($category['children']) / $category['column'])) as $children) { ?> <ul class="list-unstyled"> <?php foreach ($children as $child) { ?> <li><a href="<?php echo $child['href']; ?>"><?php echo $child['name']; ?></a></li> <?php } ?> </ul> <?php } ?> </div> <a href="<?php echo $category['href']; ?>" class="see-all"><?php echo $text_all; ?> <?php echo $category['name']; ?></a> </div> </li> <?php } else { ?> <li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a></li> <?php } ?> <?php } ?>на <?php foreach ($categories as $category) { ?> <?php $showHref = false; $tmpHref = explode('index.php?route=', $category['href']); if (isset($tmpHref[1]) && !empty($tmpHref[1])) { $showHref = true; if (substr($tmpHref[1], 0,1)=='/') { $category['href'] = $tmpHref[1]; } } else if (isset($tmpHref[0])) { $tmpHrefPath = str_replace('/', '', parse_url($tmpHref[0],PHP_URL_PATH)); if (!empty($tmpHrefPath)) { $showHref = true; $category['href'] = $tmpHref[0]; } unset($tmpHrefPath); } $category['href'] = html_entity_decode($category['href']); ?> <?php if ($category['children']) { ?> <li class="dropdown"><a href="<?php echo ($showHref)?$category['href']:''; ?>" class="dropdown-toggle" data-toggle="dropdown"><?php echo $category['name']; ?></a> <div class="dropdown-menu"> <div class="dropdown-inner"> <?php foreach (array_chunk($category['children'], ceil(count($category['children']) / $category['column'])) as $children) { ?> <ul class="list-unstyled"> <?php foreach ($children as $child) { ?> <?php $showHrefChild = false; $tmpHrefChild = explode('index.php?route=', $child['href']); if (isset($tmpHrefChild[1]) && !empty($tmpHrefChild[1])) { $showHrefChild = true; if (substr($tmpHrefChild[1], 0,1)=='/') { $child['href'] = $tmpHrefChild[1]; } } else if (isset($tmpHrefChild[0])) { $tmpHrefChildPath = str_replace('/', '', parse_url($tmpHrefChild[0],PHP_URL_PATH)); if (!empty($tmpHrefChildPath)) { $showHrefChild = true; $child['href'] = $tmpHrefChild[0]; } unset($tmpHrefChildPath); } $child['href'] = html_entity_decode($child['href']); ?> <li><a href="<?php echo ($showHrefChild)?$child['href']:''; ?>"><?php echo $child['name']; ?></a></li> <?php unset($tmpHrefChild); unset($showHrefChild); ?> <?php } ?> <?php if ($showHref) { ?> <li role="separator" class="divider"></li> <li><a href="<?php echo $category['href']; ?>" class="see-all"><?php echo $text_all; ?> <?php echo $category['name']; ?></a></li> <?php } ?> </ul> <?php } ?> </div> </div> </li> <?php } else { ?> <li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a></li> <?php } ?> <?php unset($tmpHref); unset($showHref); ?> <?php } ?>после этого можно использовать произвольные ссылки в меню в более удобоваримом виде, т.е. добавлять как сео-ссылки типа "/auto" (такие ссылки должны начинаться на слэш), так и относительные типа "product/product&path=20&product_id=35" (они будут в итоге слеплены со стандартным началом: "сайт.ру/index.php?route=", или сразу можно в полном виде добавлять) но если где-то еще меню выводить, то либо надо и там похожую канитель выписывать, либо решать уже по-человечески - правкой контроллера ах да, чуть не забыл, при такой замене кода шаблона, можно вообще ссылки не указывать для верхних пунктов меню, в этом случае они будут работать как табы и после дочерних пунктов также не будет пункта "Смотреть Все ..." и там же немного изменен вывод этого пункта, в виде более логичном - как продолжение списка, вместо имеющегося по дефолту прекращения списка и расположения ссылки следующим после него элементом, правда, вероятно, стили несколько покосятся, и придется вам либо вернуть этот кусочек на дефолтный, либо поправить стили, не уверен, у меня просто стили по ходу пишутся, поэтому сходу сказать, что в css надо для этого менять, а что нет, не смогу
  10. добавил в дополнения, можно взять здесь
  11. Замена символа рубля Мод заменяет знак валюты рубля на симпатичный почти уже стандартный символ (U+20BD), представленный в наборе глифов шрифта "Roboto" от Christian Robertson. Подходит для любого шаблона OpenCart / Ocshop (OpenCart.PRO/CMS) / OcStore версий 2.x при отсутствии прямых модификаций ядра. Схема работы: добавляет в БД новую таблицу `oc_currency_modsymbols` с одной записью - для валюты с кодом RUB на этапе выборки данных о валютах оборачивает оригинальный символ в конструкцию для обработки подключаемыми при загрузке страницы стилями не ломает возможность менять оригинальный символ в админке, который будет показан при выводе шаблонов, в которых нет возможности подключать дополнительные стили (например, почтовые уведомления), пробелы до/после оригинального символа выносятся за пределы конструкции, т.е. сохраняются после установки можно вручную добавлять записи в таблицу `oc_currency_modsymbols` для форматирования символов валют по желанию (для включения в конечную строку стандартного значения, т.е. для автозамены, вместо него следует указать "_default_symbol_") мод можно безболезненно отключать/удалять, функциональность при этом вернется к стандартной Установка: Бекап! загрузить модуль через Extensions / Extension Installer обновить кэш модификаций на странице Extensions / Modifications обновить системный кэш Удаление: Бекап! удалить мод на странице Extensions / Modifications, там же обновить кэш модификаций обновить системный кэш вручную удалить из БД таблицу `oc_currency_modsymbols` вручную удалить файлы catalog/view/theme/default/stylesheet/roboto-forced.css и roboto-forced.min.css вручную удалить файлы catalog/view/theme/default/stylesheet/font/google/roboto-subset-latin-ext-*.* При обновлении с предыдущих версий рекомендуется полное их удаление. В случае некорректного отображения блока с форматированной ценой (например, вылезающие закрывающие теги вида: руб." />") необходимо в шаблоне, где эта цена выводится, оборачивать её вывод в strip_tags(); С 2016-11-28 (v.2.5.1) в комплекте идет сабсет (latin-ext, webfont) шрифта Roboto для совместимости с браузерами, которые блокируют подгрузку внешних шрифтов (да, это про тебя, IE9, гори в аду!) Автор savage4pro Добавлен 21.10.2015 Категория 2.х pt-sans-ruble-symbol.ocmod.zip roboto-ruble-symbol.ocmod.zip roboto-rouble-symbol-2.5.ocmod.zip
  12. да, еще один вариант, если вы используете bootstrap, в его шрифте 'Glyphicons Halflings', идущем в комплекте, среди прочих символов, есть и рубль наш <span class="glyphicon glyphicon-ruble" aria-hidden="true"></span><span class="sr-only">р.</span>или <span class="glyphicon glyphicon-rub" aria-hidden="true"></span><span class="sr-only">р.</span>или в css для псевдоклассов :before/:after вашего элемента (и не забудьте указать семейство шрифтов) content: "\20bd";Upd. кстати, если внести этот код (<span class="glyphicon ...) вместо символа рубля в БД, то в шаблонах почтовых уведомлений (или в других шаблонах, страницы из которых не едят общие css-классы и дополнительные шрифты) можно будет просто заменить, например echo $product['price']; на что-то вроде echo strip_tags($product['price']);на выходе должен быть "символ" валюты без прикрас: " p." это теоретически, не пробовал Upd2. да вообще мудрить не надо, вносить этот <span... в БД и всего делов страницы без бутстрапа и так покажут содержимое второго span'а без дополнительных телодвижений в шаблонах! только перед тем как изменять символ рубля в админке, надо поправить таблицу в БД ALTER TABLE `oc_currency` CHANGE COLUMN `symbol_left` `symbol_left` VARCHAR(255) NOT NULL COMMENT '' ,CHANGE COLUMN `symbol_right` `symbol_right` VARCHAR(255) NOT NULL COMMENT '' ;и в файле /system/library/currency.php в методе format заменить $string .= $symbol_left;и$string .= $symbol_right;на $string .= html_entity_decode($symbol_left);и$string .= html_entity_decode($symbol_right);Upd3. попробовал, добавив вдогонку в css span.glyphicon.glyphicon-ruble { font-size:70%;}и вот так выглядит на дефолтной главной
  13. RHCk, посмотрите в сторону сервиса от MS: тема в курилке не надо нигде регистрироваться, результат вот он: Хром на 8ке https://www.browserstack.com/screenshots/ad25a291b66163ef089366016ae2e216264a8bf6/win8.1_chrome_42.0.jpg а так ваш сайт выглядит на ойфоне 6 https://www.browserstack.com/screenshots/ad25a291b66163ef089366016ae2e216264a8bf6/ios_iPhone-6_8.3_portrait.jpg
  14. есть такой прелестный сервис от микрософтов https://dev.modern.ie/tools/vms/ вкратце - триальные, но полноценные сборки разных версий винды с соответствующими релизам браузерами, собранные под виртуальные машинки быстро развернуть любую из версий можно легко и непринужденно, используя на своей платформе, например, VirtualBox от Oracle или VMware Workstation Player когда триал заканчивается, можно просто удалить машинку и создать новую (или пользоваться снэпшотами) там же рекомендую посмотреть на сервис, powered by BrowserStack https://dev.modern.ie/tools/screenshots/ достаточно живенько генерит скрины любой доступной веб-страницы в некоторых браузерах
  15. Win10х64 по собственному опыту могу сказать так подключаете гуглошрифт PT Sans (или любой другой, имеющий нужный нам символ в своей таблице на одной и той же позиции, который гуглом одинаково отдается разным браузерам) <link href="//fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css" />в css пишете что-то вроде .rublesymbol { font-family: 'PT Sans', sans-serif; font-style: normal;}а далее на выбор: либо изменяете в БД символ рубля на строку вида ' <i class="rublesymbol">₽</i>' а в шаблоне(-ах) почтовых уведомлений (не надейтесь, что все клиенты разрешают получение данных из интернета), и, например, если когда-нибудь понадобится, в скриптах, выполняемых из консоли а-ля PHP_CLI, придется проверять валюту и в случае рубля отдавать обычный " р."либо во всех шаблонах, показывающих символ рубля, где бы они ни были, заменяете наш ' р.' на ' <i class="rublesymbol">₽</i>' для себя выбрал первое
  16. в моем хроме (десктоп, 46.0.2490.71 m) символ этот в виде квадратика в ФФ (41.0.2), ИЕ (11.0.10240.16431), Опере (32.0.1948.69) все норм
  17. для сео лучше уникальные тексты на статичном html, подпитанные деньгой на поисковые запросы если будете ставить wp, ставьте в подпапку - органичней будет, на мой взгляд (объяснение простое: другой домен = другой сайт), а что касается сео - без разницы, что лучше настроите, то лучше и будет
  18. что-то подобное .blog-description img { max-width: 100%; height: auto!important; }
  19. если очень не хочется ручками, пишите регулярку для обработки описания статьи в контроллере, или в самом шаблоне, или нагружайте браузер посетителя тем же jquery
  20. Версия 2.1.0.1.2 Дизайн -> Меню добавление "Произвольных ссылок" приводит к небольшому вороху ошибок в итоге js-ом создается пункт, который можно, конечно, редактировать и уже сохранить, но это как-то неправильно при этом создается новая запись menu_id в таблице menu, но не добавляется запись в таблицу menu_description метод add класса ModelDesignMenu, по всей видимости писали разные люди, или один, но с перерывом на какое-нибудь радостное событие вариант решения /admin/model/design/menu.php:77-82 заменить $query = new stdClass(); $query->rows = array(); foreach ($languages as $language) { $query->rows[] = array('name' => $data['name'], 'language_id' => $language['language_id']); }на $data['menu_desc'] = array(); foreach ($languages as $language) { $data['menu_desc'][] = array('name' => $data['name'], 'language_id' => $language['language_id']); }
  21. хотелось бы: иметь возможность при работе с основном меню быстро добавлять категории и статьи блога, не тыркаясь по ссылкам, сейчас меню предлагает работать только с элементами основного каталогатам же (дизайн->меню) - добавлять произвольную относительную ссылку (никак не привязанную к index.php?route=), и например, если строка начинается на слэш (/), даже не пытаться ее обрабатывать, и не нужно вызывать Url->link()там же - совсем не указывать ссылки для пункта меню, и, соответственно, выводить его как "таб" рядом с обычными пунктами со ссылками, сейчас, напомню, при отсутствии значения поля ссылки, она-таки выводится в виде "http://example.com/index.php?route="там же - обрабатывать и выводить ошибку запрета доступа к редактированию менюв БД связать данные таблиц oc_menu% (в случае использования InnoDB) или подчищать записи после удаления пунктов логикой на стороне php, при удалении верхнего пункта, все потомки остаются, и они потеряны, т.к. вновь созданные не смогут быть их родителями (menu_id int(11) AI PK) при использовании админки, разве что вручную выстраивать связив фильтре статей блога в админке (/admin/index.php?route=blog/article) видеть пункт фильтрации по категориям (как вариант - вынос созданных категорий в левое меню под "Категории блога")все это, конечно, не столь критично пункт 1 просто вносит немного хаоса в работу пункты 2-3 вполне успешно решаются и в шаблонах, но хотелось бы как можно меньше логики выносить в них пункт 4 не сильно давит, но может кого-нибудь заставить страдать, что выразится в каком-нибудь неприятном действии типа вытягивания, например, из отпуска с криками - "менюсломалось!!1" пункт 5 засоряет ненужными данными БД, не страшно, но в случае чего дебажить неудобно а вот пункт 6 здесь наиболее критичен - найти в списке из сотни статей, предназначенных для нескольких категорий, несколько штук, например, для изменения их порядка, может быть достаточно трудно кстати, отсюда еще один крайне желательный пункт 7 ajax-сортировка статей в блоге
  22. Версия 2.1.0.1.2 (в футере админки, кстати, Версия 2.1.0.1.1, но не суть) Условия: 1. чистая установка 2.1.0.1.1 + обновление до 2.1.0.1.2 2. создан новый (почти) пустой шаблон сайта, т.о. большинство файлов шаблон берется из default Ошибка при попытке открыть любую страницу блога (/index.php?route=blog/latest, /obzori/, /index.php?route=blog/article&blog_category_id=69&article_id=125 и т.д.): Решение: найти в /catalog/controller/module/blog_featured.php:67 текст return $this->load->view('default/template/module/blog/featured.tpl', $data); и исправить его на return $this->load->view('default/template/blog/module/featured.tpl', $data);