Hallo liebe Community,
ich habe gerade das Tutorial „Example Plugin“ beendet und kann nun weder den Plugin-Manager starten, noch den Cache leeren. Falls es sich um ein Syntaxfehler handelt kann ich ihn leider nicht finden oder habe ich vielleicht falsche Dateipfade verwendet?
bearbeitete Quellen in
+ /engine/Shopware/Plugins/Local/Frontend/SystemPlugin/
-
Bootstrap.php
subscribeEvent(
„Enlight_Bootstrap_InitResource_shopware_frontend.seo_category_service“,
„registerSeoCategoryService“
);$this->subscribeEvent( "Enlight_Bootstrap_AfterInitResource_shopware_frontend.list_product_service", "registerListProductService" ); $this->subscribeEvent( "Enlight_Contoller_Action_PostDispatchSecure_Frontend", "addTemplateDir" ); $this->subscribeEvent( "Enlight_Contoller_Action_PostDispatchSecure_Widgets", "addTemplateDir" ); $this->subscribeEvent( "Theme_Compiler_Collect_Plugin_Less", "onCollectLessFiles" ); return true; } public function afterInit(){ $this->get("Loader")->registerNamespace("ShopwarePlugins\SystemPlugin", $this->Path()); } # @return \Shopware\Components\Theme\LessDefinition public function onCollectLessFiles(){ return new \Shopware\Components\Theme\LessDefinition([], [__DIR__. "/Views/frontend/_public/src/less/all.less]"); } public function addTemplateDir(){ Shopware()->Container()->get("template")->addTemplateDir($this->Path() . "Views/"); } public function registerSeoCategoryService(){ $seoCategoryService = new SeoCategoryService( Shopware()->Container()->get("dbal_connection"), Shopware()->Container()->get("shopware_storefront.category_service") ); Shopware()->Container()->set("shopware_storefront.seo_category_service", $seoCategoryService); } public function registerListProductService(){ Shopware()->Container()->set( "shopware_storefront.list_product_service", new ListProductService( Shopware()->Container()->get("shopware_storefront.list_product_service"), Shopware()->Container()->get("shopware_storefront.seo_category_service") ) ); }
}
?>
-
StoreFrontBundle/ListProductService.php
service = $service;
$this->seoCategoryService = $seoCategoryService;
}# @inheritdoc public function getList(array $numbers, Struct\ProductContextInterface $context){ $products = $this->service->getList($numbers, $context); $categories = $this->seoCategoryService->getList($products, $context); # @var $product Struct\ListProduct*\ foreach($products as $product){ $productId = $product->getId(); if(!isset($categories[$productId])){ continue; } $attribute = new Struct\Attribute(["category" => $categories[$productId]]); $product->addAttribute("system_plugin", $attribute); } return $products; } # @inheritdoc public function get($number, Struct\ProductContextInterface $context){ $products = $this->getList([$number], $context); return array_shift($products); }
}
?>
- StoreFrontBundle/SeoCategoryService.php
connection = $connection;
$this->categoryService = $categoryService;
}
# @param ListProduct[] $listProducts
# @param ShopContextInterface $context
# @return Category[] $indexed by product id
public function getList($listProducts, ShopContextInterface $context){
$ids = array_map(function(ListProduct $product){
return $product->getId();
}, $listProducts);
# select all SEO category ids, indexed by product id
$ids = $this->getCategoryIds($ids, $context);
# now select all category data for the selected ids
$categories = $this->categoryService->getList($ids, $context);
$result = [];
foreach($ids as $productId => $categoryId){
if(!isset($categories[$categoryId])){
continue;
}
$result[$productId] = $categories[$categoryId];
}
return $result;
}
# @param ids
# @param $context
public function getCategoryIds($ids, ShopContextInterface $context){
$query = $this->connection->createQueryBuilder();
$query
->select('seoCategories.article_id', 'seoCategories.category_id')
->from('s_articles_categories_seo', 'seoCategories')
->andWhere('seoCategories.article_id IN (:productIds)')
->andWhere('seoCategories.shop_id = :shopId')
->setParameter(':shopId', $context->getShop()->getId())
->setParameter('_productIds', $ids, Connection::PARAM_INT_ARRAY);
return $query->execute()->fetchAll(\PDO::FETCH_KEY_PAIR);
}
}
?>
-
Views/frontend/detail/actions.tpl
{extends file=„parent:frontend/detail/actions.tpl“}
{block name=‚frontend_detail_actions_voucher‘ append}
{if $sArticle.attributes.system_plugin}
{$seoAttribute = $sArticle.attributes.system_plugin}
{include file=„frontend/system_plugin/detail-link.tpl“ seoCategory=$seoAttribute->get(‚category‘)}
{/if}
{/block}
-
Views/frontend/listing/product-box/product-badges.tpl
{extends file=„parent:frontend/listing/product-box/product-badges.tpl“}
{block name=„frontend_listing_box_article_new“ append}
{if $sArticle.attributes.system_plugin}
{$seoAttribute = $sArticle.attributes.system_plugin}{include file="frontend/system_plugin/listing-badge.tpl" seoCategory=$seoAttribute->get('category')} {/if}
{/block}
-
Views/frontend/system_plugin/detail-link.tpl
{block name=„frontend_system_plugin_detail_link“}
{block name="frontend_system_plugin_detail_link_icon"} {/block} {block name="frontend_system_plugin_detail_link_text"} {$seoCategory->getName()} {/block}
{/block}
-
Views/frontend/system_plugin/listing-badge.tpl
{block name=„frontend_system_plugin_listing_badge“}
{block name="frontend_system_plugin_listing_badge_category"} {$seoCategory->getName()} {/block}
{/block}
-
Views/frontend/_public/src/less/all.less
.badge–seo-category {
color: #fff;
background: #000;
}