spryker-demo / merchant-review-feature
Merchant review [feature]
1.0.0
2025-04-09 16:09 UTC
Requires
- php: >=8.2
- spryker-demo/merchant-review: ^1.1.0
- spryker-demo/merchant-review-gui: ^1.1.0
- spryker-demo/merchant-review-merchant-portal-gui: ^1.1.0
- spryker-demo/merchant-review-search: ^1.1.0
- spryker-demo/merchant-review-widget: ^1.1.0
README
Merchant Review Feature
Installation
Install feature
composer require spryker-demo/merchant-review-feature
Add SprykerDemo
namespace to configuration
$config[KernelConstants::CORE_NAMESPACES] = [
'SprykerDemo',
...
];
Build transfers
console transfer:generate
Wire route provider plugin
# src/Pyz/Yves/Router/RouterDependencyProvider.php
use SprykerDemo\Yves\MerchantReviewWidget\Plugin\Router\MerchantReviewWidgetRouteProviderPlugin;
// ...
public function getRouteProvider(): array
{
return [
// ...
new MerchantReviewWidgetRouteProviderPlugin(),
];
});
Wire merchant review widget
# src/Pyz/Yves/ShopApplication/ShopApplicationDependencyProvider.php
use SprykerDemo\Yves\MerchantReviewWidget\Widget\MerchantReviewWidget;
// ...
protected function getGlobalWidgets(): array
{
return [
// ...
MerchantReviewWidget::class,
];
});
Apply Twig customization
# src/Pyz/Yves/MerchantProfileWidget/Theme/default/components/molecules/merchant-profile/merchant-profile.twig
{% block body %}
<div class="grid grid--gap">
{{ block('contentInner') }}
</div>
{% widget 'MerchantReviewWidget' args [data.idMerchant] only %}{% endwidget %}
{{ block('additional') }}
{% endblock %}
Wire search plugins
# src/Pyz/Client/MerchantReviewSearch/MerchantReviewSearchDependencyProvider.php
use Spryker\Client\SearchElasticsearch\Plugin\QueryExpander\PaginatedQueryExpanderPlugin;
use Spryker\Client\SearchElasticsearch\Plugin\ResultFormatter\PaginatedResultFormatterPlugin;
use SprykerDemo\Client\MerchantReviewSearch\Plugin\Elasticsearch\QueryExpander\RatingAggregationQueryExpanderPlugin;
use SprykerDemo\Client\MerchantReviewSearch\Plugin\Elasticsearch\QueryExpander\SortByCreatedAtQueryExpanderPlugin;
use SprykerDemo\Client\MerchantReviewSearch\Plugin\Elasticsearch\ResultFormatter\MerchantReviewsResultFormatterPlugin;
use SprykerDemo\Client\MerchantReviewSearch\Plugin\Elasticsearch\ResultFormatter\RatingAggregationResultFormatterPlugin;
// ...
/**
* @return array<\Spryker\Client\SearchExtension\Dependency\Plugin\QueryExpanderPluginInterface>
*/
public function getMerchantReviewsQueryExpanderPlugins(): EventSubscriberCollectionInterface
{
return [
// ...
new PaginatedQueryExpanderPlugin(),
new RatingAggregationQueryExpanderPlugin(),
new SortByCreatedAtQueryExpanderPlugin(),
];
}
/**
* @return array<\Spryker\Client\SearchExtension\Dependency\Plugin\ResultFormatterPluginInterface>
*/
public function getMerchantReviewsSearchResultFormatterPlugins(): array
{
return [
// ...
new MerchantReviewsResultFormatterPlugin(),
new PaginatedResultFormatterPlugin(),
new RatingAggregationResultFormatterPlugin(),
];
}
/**
* @return array<\Spryker\Client\SearchExtension\Dependency\Plugin\QueryExpanderPluginInterface>
*/
protected function getMerchantRatingAggregationQueryExpanderPlugins(): array
{
return [
new LocalizedQueryExpanderPlugin(),
new RatingAggregationQueryExpanderPlugin(),
];
}
/**
* @return array<\Spryker\Client\SearchExtension\Dependency\Plugin\ResultFormatterPluginInterface>
*/
protected function getMerchantRatingAggregationResultFormatterPlugins(): array
{
return [
new RatingAggregationResultFormatterPlugin(),
];
}
Wire publisher plugins
# src/Pyz/Zed/Publisher/PublisherDependencyProvider.php
use SprykerDemo\Zed\MerchantReviewSearch\Communication\Plugin\Publisher\MerchantReviewSearchDeletePublisherPlugin;
use SprykerDemo\Zed\MerchantReviewSearch\Communication\Plugin\Publisher\MerchantReviewSearchPublisherTriggerPlugin;
use SprykerDemo\Zed\MerchantReviewSearch\Communication\Plugin\Publisher\MerchantReviewSearchWritePublisherPlugin;
// ...
protected function getPublisherTriggerPlugins(): array
{
return [
// ...
new MerchantReviewSearchPublisherTriggerPlugin(),
];
}
protected function getPublisherPlugins(): array
{
return [
// ...
new MerchantReviewSearchDeletePublisherPlugin(),
new MerchantReviewSearchWritePublisherPlugin(),
];
}
Wire queue plugins
# src/Pyz/Zed/Queue/QueueDependencyProvider.php
use SprykerDemo\Shared\MerchantReviewSearch\MerchantReviewSearchConfig;
// ...
protected function getProcessorMessagePlugins(Container $container): array
{
return [
// ...
MerchantReviewSearchConfig::MERCHANT_REVIEW_SYNC_SEARCH_QUEUE => new SynchronizationSearchQueueMessageProcessorPlugin(),
];
}
Configure ACL
# src/Pyz/Zed/AclMerchantPortal/AclMerchantPortalDependencyProvider.php
use SprykerDemo\Zed\MerchantReviewMerchantPortalGui\Communication\Plugin\AclMerchantPortal\MerchantReviewAclEntityConfigurationExpanderPlugin;
use SprykerDemo\Zed\MerchantReviewMerchantPortalGui\Communication\Plugin\AclMerchantPortal\MerchantReviewMerchantPortalGuiMerchantAclRuleExpanderPlugin;
// ...
protected function getAclEntityConfigurationExpanderPlugins(): array
{
return [
// ...
new MerchantReviewAclEntityConfigurationExpanderPlugin(),
];
}
protected function getMerchantAclRuleExpanderPlugins(): array
{
return [
// ...
new MerchantReviewMerchantPortalGuiMerchantAclRuleExpanderPlugin(),
];
}
# src/Pyz/Zed/Acl/AclConfig.php
protected function addPyzMerchantPortalInstallerRules(array $installerRules): array
{
return [
// ...
'merchant-review-merchant-portal-gui',
];
}
Adjust Navigation configuration file
<?xml version="1.0"?>
<config>
...
<administration>
...
<pages>
...
<merchant-reviews>
<label>My Merchant Reviews & Ratings</label>
<title>My Merchant Reviews & Ratings</title>
<bundle>merchant-review-gui</bundle>
<controller>index</controller>
<action>index</action>
</merchant-reviews>
</pages>
</administration>
<merchant-review-merchant-portal-gui>
<label>Merchant Reviews</label>
<title>Merchant Reviews</title>
<icon>offers</icon>
<bundle>merchant-review-merchant-portal-gui</bundle>
<controller>merchant-reviews</controller>
<action>index</action>
</merchant-review-merchant-portal-gui>
</config>
Apply Twig customization
# src/Pyz/Zed/ProductManagement/Presentation/Index/index.twig
{% block action %}
{{ createActionButton('/import-process-spreadsheet-gui/index/select-sheet', 'Product Import from Spreadsheet' | trans) }}
...
{% endblock %}
Add translations
# data/import/common/common/glossary.csv
merchant_review.merchant_ratings,Merchant Ratings,en_US
merchant_review.merchant_ratings,Bewertungen,de_DE
merchant_review.merchant_ratings,Merchant Ratings,fr_FR
merchant_review.merchant_ratings,Merchant Ratings,es_ES
merchant_review.merchant_reviews,Merchant Reviews,en_US
merchant_review.merchant_reviews,Rezensionen,de_DE
merchant_review.merchant_reviews,Merchant Reviews,fr_FR
merchant_review.merchant_reviews,Merchant Reviews,es_ES
merchant_review.on,on,en_US
merchant_review.on,am,de_DE
merchant_review.on,on,fr_FR
merchant_review.on,on,es_ES
merchant_review.summary.star,star,en_US
merchant_review.summary.star,Stern,de_DE
merchant_review.summary.star,étoile,fr_FR
merchant_review.summary.star,estrella,es_ES
merchant_review.summary.stars,stars,en_US
merchant_review.summary.stars,Sterne,de_DE
merchant_review.summary.stars,étoiles,fr_FR
merchant_review.summary.stars,estrellas,es_ES
merchant_review.summary.out_of,out of,en_US
merchant_review.summary.out_of,von,de_DE
merchant_review.summary.out_of,hors de,fr_FR
merchant_review.summary.out_of,fuera de,es_ES
merchant_review.summary.review,review,en_US
merchant_review.summary.review,Bewertung,de_DE
merchant_review.summary.review,commentaire,fr_FR
merchant_review.summary.review,reseña,es_ES
merchant_review.summary.reviews,reviews,en_US
merchant_review.summary.reviews,Bewertungen,de_DE
merchant_review.summary.reviews,commentaires,fr_FR
merchant_review.summary.reviews,reseñas,es_ES
merchant_review.summary.title,Merchant Reviews & Ratings,en_US
merchant_review.summary.title,Händlerbewertungen,de_DE
merchant_review.summary.title,Merchant Reviews & Ratings,fr_FR
merchant_review.summary.title,Merchant Reviews & Ratings,es_ES
merchant_review.no_reviews,No review for this merchant yet,en_US
merchant_review.no_reviews,Noch keine Bewertung für diesen Händler,de_DE
merchant_review.no_reviews,No review for this merchant yet,fr_FR
merchant_review.no_reviews,No review for this merchant yet,es_ES
merchant_review.submit.add_a_review,Add a Review,en_US
merchant_review.submit.add_a_review,Bewertung hinzufügen,de_DE
merchant_review.submit.add_a_review,Ajouter un commentaire,fr_FR
merchant_review.submit.add_a_review,Agrega una reseña,es_ES
merchant_review.submit.rating,Rating,en_US
merchant_review.submit.rating,Bewertung,de_DE
merchant_review.submit.rating,Notation,fr_FR
merchant_review.submit.rating,Clasificación,es_ES
merchant_review.submit.rating.none,No rating was selected,en_US
merchant_review.submit.rating.none,Es wurde keine Bewertung ausgewählt,de_DE
merchant_review.submit.rating.none,No rating was selected,fr_FR
merchant_review.submit.rating.none,No rating was selected,es_ES
merchant_review.submit.summary,Summary,en_US
merchant_review.submit.summary,Überschrift,de_DE
merchant_review.submit.summary,Résumé,fr_FR
merchant_review.submit.summary,Resumen,es_ES
merchant_review.submit.description,Description,en_US
merchant_review.submit.description,Rezension,de_DE
merchant_review.submit.description,Description,fr_FR
merchant_review.submit.description,Descripción,es_ES
merchant_review.submit.nickname,Name,en_US
merchant_review.submit.nickname,Name,de_DE
merchant_review.submit.nickname,Nom,fr_FR
merchant_review.submit.nickname,Nombre,es_ES
merchant_review.submit.success,Merchant review was successfully submitted.,en_US
merchant_review.submit.success,Rezensionen wurde erfolgreich versendet.,de_DE
merchant_review.submit.success,Merchant review was successfully submitted.,fr_FR
merchant_review.submit.success,Merchant review was successfully submitted.,es_ES
merchant_review.error.no_customer,Please login to access this feature.,en_US
merchant_review.error.no_customer,"Bitte melden Sie sich an, um Zugiff auf dieses Feature zu erhalten.",de_DE
merchant_review.error.no_customer,Please login to access this feature.,fr_FR
merchant_review.error.no_customer,Please login to access this feature.,es_ES
merchant_review.error.invalid_rating,Merchant rating should be selected.,en_US
merchant_review.error.invalid_rating,Bewertungen soll ausgewählt werden.,de_DE
merchant_review.error.invalid_rating,Merchant rating should be selected.,fr_FR
merchant_review.error.invalid_rating,Merchant rating should be selected.,es_ES
merchant_review.error.no_blank_nickname,Please fill the Nickname.,en_US
merchant_review.error.no_blank_nickname,Bitte geben Sie den Spitznamen ein.,de_DE
merchant_review.error.no_blank_nickname,Please fill the Nickname.,fr_FR
merchant_review.error.no_blank_nickname,Please fill the Nickname.,es_ES
merchant_review.error.no_blank_summary,Please fill the summary.,en_US
merchant_review.error.no_blank_summary,Bitte füllen Sie die Zusammenfassung aus.,de_DE
merchant_review.error.no_blank_summary,Please fill the summary.,fr_FR
merchant_review.error.no_blank_summary,Please fill the summary.,es_ES
merchant_review.error.no_blank_description,Please fill the description.,en_US
merchant_review.error.no_blank_description,Bitte füllen Sie die Beschreibung aus.,de_DE
merchant_review.error.no_blank_description,Please fill the description.,fr_FR
merchant_review.error.no_blank_description,Please fill the description.,es_ES
merchant_review.reviews,Reviews,en_US
merchant_review.reviews,Bewertungen,de_DE
merchant_review.reviews,Reviews,fr_FR
merchant_review.reviews,Reviews,es_ES
Import translations
console data:import:glossary
Add synchronization
Propel behavior
<database xmlns="spryker:schema-01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="zed" xsi:schemaLocation="spryker:schema-01 https://static.spryker.com/schema-01.xsd" namespace="Orm\Zed\MerchantReviewSearch\Persistence" package="src.Orm.Zed.MerchantReviewSearch.Persistence">
<table name="spy_merchant_review_search" identifierQuoting="true">
<behavior name="synchronization">
<parameter name="queue_pool" value="synchronizationPool"/>
</behavior>
</table>
</database>
Add event
Propel behavior
<?xml version="1.0"?>
<database xmlns="spryker:schema-01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="spryker:schema-01 https://static.spryker.com/schema-01.xsd" name="zed" namespace="Orm\Zed\MerchantReview\Persistence" package="src.Orm.Zed.MerchantReview.Persistence">
<table name="spy_merchant_review" idMethod="native" allowPkInsert="true">
<behavior name="event">
<parameter name="spy_merchant_review_all" column="*"/>
</behavior>
</table>
</database>
Build Propel classes
console propel:install
Build Backoffice frontend
frontend:zed:install-dependencies
frontend:zed:build
Build Yves frontend
frontend:yves:install-dependencies
frontend:yves:build
Build MP frontend
frontend:mp:install-dependencies
frontend:mp:build