Как использовать настраиваемые образцы Magento 1.9.1.0 в теме пакета по умолчанию (или в пользовательской теме)?
-
12-12-2019 - |
Вопрос
ОБНОВЛЯТЬ: Мой ответ теперь поддерживает автоматизированное изменение базового изображения продукта после образца.Вы также можете найти более подробный учебник о том, как это сделать, включая больше изображений здесь.
В Magento CE 1.9.1.0 появилась очень приятная новая функция:Настраиваемые образцы.К сожалению, это доступно только для пакета RWD, который поставляется с установкой Magento по умолчанию.Это вопрос, на который вы сами отвечаете на вопрос, как сделать настраиваемые образцы Magento доступными для пакета по умолчанию.Для тех, кто хочет интегрировать настраиваемые образцы в пользовательскую тему, эта информация также может пригодиться.
Примечание 1: Это вводное руководство о том, как сделать настраиваемые образцы доступными для пакета Magento по умолчанию.Это может (но не может) работать для каждой пользовательской темы.Всегда делайте резервные копии исходных файлов (и базы данных) перед внесением каких-либо изменений.
Заметка 2: Образцы работают (снимок экрана ниже), но мне еще не удалось автоматически изменить изображение продукта вместе с образцами.Я постараюсь разобраться в этом, когда найду время.
Не стесняйтесь вносить свой вклад, комментируя и внося предложения!
Решение
Скопируйте папку
app/design/frontend/RWD/default/template/configurableswatches/
и его содержание для
app/design/frontend/DEFAULT/default/template/
(или папку шаблона вашего пакета)
Скопируйте файл
app/design/frontend/RWD/default/template/catalog/product/view/type/options/configurable.phtml
к
app/design/frontend/DEFAULT/default/template/catalog/product/view/type/options/
(или папку шаблона вашего пакета)
Скопируйте файл
app/design/frontend/RWD/default/template/catalog/product/view/media.phtml
к
app/design/frontend/DEFAULT/default/template/catalog/product/view/
(или папку шаблона вашего пакета)
Скопируйте папки
skin/frontend/RWD/default/js/configurableswatches/ skin/frontend/RWD/default/js/lib/
и их содержание для
skin/frontend/DEFAULT/default/js/
(или папку скина вашего пакета)
Скопируйте файлы
skin/frontend/RWD/default/js/app.js skin/frontend/RWD/default/js/minicart.js skin/frontend/RWD/default/js/slideshow.js
к
skin/frontend/DEFAULT/default/js/
(или папку скина вашего пакета)
Скопируйте файл
app/design/frontend/RWD/default/layout/configurableswatches.xml
к
app/design/frontend/DEFAULT/default/layout/
(или папку макета вашей упаковки)
Создать файл
app/design/frontend/DEFAULT/default/layout/local.xml
Если папка макета вашего пакета уже содержит
local.xml
Файл, затем не перезаписывайте его.Посмотрите на изменения на следующем шаге и скопируйте их в вашу версиюlocal.xml
файл.
Открыть
local.xml
и добавьте следующий код:<?xml version="1.0"?> <layout> <default> <reference name="head"> <action method="addJs"><script>lib/jquery/jquery-1.10.2.min.js</script></action> <action method="addJs"><script>lib/jquery/noconflict.js</script></action> <action method="addItem"><type>skin_js</type><name>js/lib/modernizr.custom.min.js</name></action> <action method="addItem"><type>skin_js</type><name>js/lib/selectivizr.js</name></action> <action method="addItem"><type>skin_js</type><name>js/lib/matchMedia.js</name></action> <action method="addItem"><type>skin_js</type><name>js/lib/matchMedia.addListener.js</name></action> <action method="addItem"><type>skin_js</type><name>js/lib/enquire.js</name></action> <action method="addItem"><type>skin_js</type><name>js/app.js</name></action> <action method="addItem"><type>skin_js</type><name>js/lib/jquery.cycle2.min.js</name></action> <action method="addItem"><type>skin_js</type><name>js/lib/jquery.cycle2.swipe.min.js</name></action> <action method="addItem"><type>skin_js</type><name>js/slideshow.js</name></action> <action method="addItem"><type>skin_js</type><name>js/lib/imagesloaded.js</name></action> <action method="addItem"><type>skin_js</type><name>js/minicart.js</name></action> </reference> </default> <catalog_product_view> <reference name="head"> <action method="addItem"><type>skin_js</type><script>js/lib/elevatezoom/jquery.elevateZoom-3.0.8.min.js</script></action> </reference> <reference name="product.info.media"> <block type="core/text_list" name="product.info.media.after" as="after" /> </reference> </catalog_product_view> <PRODUCT_TYPE_configurable> <reference name="product.info.options.configurable"> <block type="core/text_list" name="product.info.options.configurable.renderers" as="attr_renderers"> <block type="configurableswatches/catalog_product_view_type_configurable_swatches" template="configurableswatches/catalog/product/view/type/options/configurable/swatches.phtml" /> </block> <block type="core/text_list" name="product.info.options.configurable.after" as="after"> <block type="core/template" template="configurableswatches/catalog/product/view/type/configurable/swatch-js.phtml" /> </block> </reference> </PRODUCT_TYPE_configurable> </layout>
Добавьте следующий CSS в свой стили.css файл:
/* ============================================ * * Configurable Swatches * ============================================ */ /* Clears */ .clearfix:after, .configurable-swatch-list:after, .product-view .product-options .swatch-attr:after { content: ''; display: table; clear: both; } /* General Swatch Styling */ .swatch-link, .swatch-label { display: block; border-radius: 3px; font-size: 14px; text-align: center; color: #636363; text-decoration: none; box-sizing: content-box; } .swatch-link { border: 1px solid #cccccc; margin: 0 0 3px; } .swatch-link img { border-radius: 2px; } .swatch-link:hover { cursor: pointer; text-decoration: none; } .swatch-link .x { display: none; text-indent: -999em; position: absolute; left: 0; right: 0; top: 0; bottom: 0; background: url(../images/bg_x.png) center no-repeat transparent; z-index: 10; } .swatch-link.has-image .swatch-label { position: relative; } .swatch-link.has-image img { position: absolute; top: 0; left: 0; } .swatch-label { border: 1px solid #fff; margin: 0; white-space: nowrap; background: #f4f4f4; } .configurable-swatch-list { margin-left: -3px; zoom: 1; clear: both; -webkit-transform: translateZ(0px); } .configurable-swatch-list li { float: left; zoom: 1; margin: 0 0 0 3px; } .products-grid .configurable-swatch-list li { display: inline-block; float: none; margin: 0; vertical-align: top; } .configurable-swatch-list .not-available .x { display: block; } .configurable-swatch-list .not-available .swatch-link { border-color: #ededed; position: relative; } .configurable-swatch-list .not-available .swatch-link.has-image img { opacity: 0.4; filter: alpha(opacity=40); } .configurable-swatch-list .not-available .swatch-label { color: #aaa; background: #fff; } .configurable-swatch-list .wide-swatch .swatch-label { padding: 0 6px; } .configurable-swatch-list .not-available a:focus { outline: 0; } #narrow-by-list dd .configurable-swatch-list li { margin: 0 0 0 3px; width: 47%; } #narrow-by-list dd .swatch-link { border: none; line-height: 25px; margin-right: 2px; text-align: left; } #narrow-by-list dd .swatch-link.has-image { line-height: inherit; } #narrow-by-list dd .swatch-link:hover .swatch-label { border-color: #3399cc; } #narrow-by-list dd .swatch-label { background: #f4f4f4; border: 1px solid #cccccc; border-radius: 3px; display: block; float: left; line-height: 1.5em; margin: 0 5px 0 0; padding: 1px 5px; white-space: nowrap; } #narrow-by-list dd .swatch-label img { border: 1px solid #fff; border-radius: 3px; box-sizing: content-box; } #narrow-by-list dd .has-image .swatch-label { padding: 0; } @media only screen and (max-width: 770px) { #narrow-by-list dd .configurable-swatch-list li:nth-child(odd) { clear: left; } } .currently .swatch-current { position: relative; } .currently .swatch-current .btn-remove { margin-top: -10px; position: absolute; right: 0; top: 50%; } .currently .swatch-current span { display: block; float: left; } .currently .swatch-link { display: inline-block; margin: 0 0 0 3px; } .currently .swatch-link:hover { border-color: #cccccc; cursor: default; } /* Other Swatch States */ .configurable-swatch-list .hover .swatch-link, .configurable-swatch-list .selected .swatch-link, .swatch-link:hover { border-color: #3399cc; } .configurable-swatch-box { background: none !important; } .configurable-swatch-box select.swatch-select { display: none; } .configurable-swatch-box .validation-advice { margin: 0 0 5px; background: #df280a; padding: 2px 5px !important; font-weight: bold; color: #fff !important; float: left; display: block; border-radius: 3px; } .product-view .product-img-box .product-image img { max-width: 100%; max-height: 750px; margin: 0px auto; } .product-view .product-img-box .product-image-zoom { z-index: 0; } .product-view .product-image-thumbs img { max-width: 100%; max-height: 100%; }
Скопируйте файл
skin/frontend/RWD/default/images/bg_x.png
к
skin/frontend/DEFAULT/default/images/
Другие советы
Ваше решение отличное, но не показывать образец цвета в списке категорий или сетку.Здесь я добавляю решение, чтобы показать его, проверено на Magento 1.9.2.4.
IN: App / Design / Fressend / Custom-Theme / Шаблон / Каталог / Добавить Добавить в следующую настройку в <Сильный> List.phtml
1 - сначала показать в представлении списка, проверьте, если там это, если нет, обновлять изменение O (Aroud Line 39):
<?php $_imgSize = 300; ?>
<img id="product-collection-image-<?php echo $_product->getId(); ?>"
src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->keepFrame(false)->resize($_imgSize); ?>"
alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" />
</a>
.
в альтернативе может использовать это:
<img id="product-collection-image-<?php echo $_product->getId(); ?>"
src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(230,279); ?>" class="small-image"
alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" />
</a>
.
Отрегулируйте размер изображения.
2 - после "getratingsumbary"= PHP END IF=, около строки 53, добавьте это:
<?php
// Provides extra blocks on which to hang some features for products in the list
// Features providing UI elements targeting this block will display directly below the product name
if ($this->getChild('name.after')) {
$_nameAfterChildren = $this->getChild('name.after')->getSortedChildren();
foreach ($_nameAfterChildren as $_nameAfterChildName) {
$_nameAfterChild = $this->getChild('name.after')->getChild($_nameAfterChildName);
$_nameAfterChild->setProduct($_product);
echo $_nameAfterChild->toHtml();
}
}
?>
.
3 - Сделайте то же изменение на Gird View вокруг линии 120 и 152.
4 - В конце файла добавьте это:
<?php
// Provides a block where additional page components may be attached, primarily good for in-page JavaScript
if ($this->getChild('after')) {
$_afterChildren = $this->getChild('after')->getSortedChildren();
foreach ($_afterChildren as $_afterChildName) {
$_afterChild = $this->getChild('after')->getChild($_afterChildName);
//set product collection on after blocks
$_afterChild->setProductCollection($_productCollection);
echo $_afterChild->toHtml();
}
}
?>
. Это было очень полезно! У меня есть дополнительные детали, которые я смог проработать, чтобы получить переключение изображения на работу.
-
Скопируйте файл
.app/design/frontend/RWD/default/template/catalog/product/view/media.phtml
к
.app/design/frontend/DEFAULT/default/template/catalog/product/view/
или ваша пользовательская тема
-
Скопируйте следующий список файлов:
.app/skin/frontend/RWD/default/js/app.js app/skin/frontend/RWD/default/js/slideshow.js app/skin/frontend/RWD/default/js/lib/* (all files and the elevatezoom folder)
к
.app/skin/frontend/DEFAULT/default/js
или ваша пользовательская тема
-
Чтобы включить эти новые скрипты, редактировать приложение / дизайн / foreend / default / default / layout / page.xml. (Сделайте резервную копию этого файла сначала и убедитесь, что объединить изменения, если вы делаете обновления в качестве темы по умолчанию будет перезаписан)
Добавить после строки 38:
.<action method="addJs"><script>lib/jquery/jquery-1.10.2.min.js</script></action> <action method="addJs"><script>lib/jquery/noconflict.js</script></action>
Добавить после строки 50 (строка 52, если вы уже добавили два строки выше):
<action method="addItem"><type>skin_js</type><name>js/lib/modernizr.custom.min.js</name></action> <action method="addItem"><type>skin_js</type><name>js/lib/selectivizr.js</name></action> <action method="addItem"><type>skin_js</type><name>js/lib/matchMedia.js</name></action> <action method="addItem"><type>skin_js</type><name>js/lib/matchMedia.addListener.js</name></action> <action method="addItem"><type>skin_js</type><name>js/lib/enquire.js</name></action> <action method="addItem"><type>skin_js</type><name>js/app.js</name></action> <action method="addItem"><type>skin_js</type><name>js/lib/jquery.cycle2.min.js</name></action> <action method="addItem"><type>skin_js</type><name>js/lib/jquery.cycle2.swipe.min.js</name></action> <action method="addItem"><type>skin_js</type><name>js/slideshow.js</name></action> <action method="addItem"><type>skin_js</type><name>js/lib/imagesloaded.js</name></action>
-
Удалить изображения / * продукты * / раздел из вашего файла
styles.csss file (вокруг строки 783-803) и вставка в следующие CSS из файла rwd styles.css: < / P >. * Product Images */ .product-img-box { width: 50%; float: left; } .product-img-box .product-name h1 { border: 0; } .product-img-box .product-image { margin-bottom: 10px; } .product-img-box .product-image img { max-width: 100%; max-height: 750px; margin: 0px auto; } @media only screen and (max-width: 479px) { .product-img-box .product-image img { max-height: 450px; } } .product-image-gallery { position: relative; } .product-image-gallery .gallery-image { display: none; } .product-image-gallery .gallery-image.visible { display: block; } .product-image-gallery .gallery-image.visible.hidden { visibility: hidden; } .product-image-gallery:before, .product-image-gallery:after { content: ''; position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; display: none; } .product-image-gallery:before { background-color: white; opacity: 0.8; z-index: 2; } .product-image-gallery:after { background-image: url("../images/opc-ajax-loader.gif"); background-repeat: no-repeat; background-position: center; z-index: 3; } .product-image-gallery.loading { position: relative; } .product-image-gallery.loading:before, .product-image-gallery.loading:after { display: block; } .product-image-thumbs li { display: inline-block; } .product-image-thumbs li:first-child { margin-left: -1px; } .product-image-thumbs a { display: inline-block; border: 1px solid transparent; } .no-touch .product-image-thumbs a:hover { border-color: #c7c7c7; }
Последнее, но не в последнюю очередь, некоторые оптимизации для элеватеза благодаря Google и нахождение следующего поста на Блог Belvg by Mishel Soiko , я смог изменить и воспользоваться дополнительными настройками для EllaTezoom, таких как внутренний зум или смещение окна Zoom, и т. Д. , Также я хотел, чтобы изображение было всплывающему FancyBox при нажатии, что я включил с помощью с помощью приведенного выше блога в комментариях.
-
Открыть, что app.js файл, который вы скопировали на свою тему ранее
выше линии 1153 (
var ProductMediaManager = {
), вставка в (скопировано из приведенного выше BELVG Blog Link):
.var settings = { // set tint background tint:true, tintColour:'#F90', tintOpacity:0.5, // Size zoomWindowHeight: 300, zoomWindowWidth: 400, borderSize: 0, // Position zoomWindowOffetx: 10, zoomWindowOffety: 0, // Additional settings for Zoomer positioning. // zoomWindowPosition: 1, // zoomType: "inner", // Fade-in speed settings zoomWindowFadeIn: 500, zoomWindowFadeOut: 500, lensFadeIn: 500, lensFadeOut: 500, // Ability to zoom by using the mouse scroll. scrollZoom : true, // inertia - my favorite one easing: true }
Если вы хотите всплывающее окно Fancybox, а выше то, что сейчас строка 1227, вставьте:
.$j(".product-image-gallery").on("click", function(e) { var src = $j('.product-image img.visible').attr('src'); $j.fancybox(src); });
Примечание. Вам нужно будет загрузка библиотеки FancyBox JS после jQuery на вашей странице .xml или в другом месте в вашей теме Наконец, изменить то, что сейчас Line 1232 (если вы сделали оба пастера сверху) от:
.image.elevateZoom();
to:
image.elevateZoom(settings);
Для обзора всех настроек Zoomer, посмотрите на официальную страницу, описывающую Настройки элевата
И это должно заставить его работать. Если вы работаете с пользовательской темой (как я был), у вас может быть больше.
-