定制 abenmada/sylius-broken-link-handler-plugin 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

abenmada/sylius-broken-link-handler-plugin

最新稳定版本:v1.0.0

Composer 安装命令:

composer require abenmada/sylius-broken-link-handler-plugin

包简介

The Broken Link Handler plugin automatically redirects outdated product and taxon slugs to their new versions, ensuring they remain permanent and preventing their reuse by other entities

README 文档

README

The Broken Link Handler plugin automatically redirects outdated product and taxon slugs to their new versions, ensuring they remain permanent and preventing their reuse by other entities.

The goal is to optimize your site so that search engines can index it more effectively, which will help improve its organic search ranking (SEO).

Presentation

Whenever you create or update a product's slug, it will be automatically saved in the product's slug history.

presentation photo

A slug that has already been used for a product can never be reused for another. This ensures that old slugs will always remain associated with the same product, so that when accessing an old slug, the user will be redirected to the new one.

presentation photo

For example, if someone tries to access the URL /fr_FR/products/000f-grey-jeans, a 301 redirect will automatically lead to /fr_FR/products/000f-v2-jean-gris.

This slug management system is also implemented for taxons. Thus, when attempting to access the page /fr_FR/taxons/t-shirts/les-hommes, a redirection will occur to /fr_FR/taxons/t-shirts/hommes.

presentation photo

Installation

Require plugin with composer :

composer require abenmada/sylius-broken-link-handler-plugin

Change your config/bundles.php file to add the line for the plugin :

<?php

return [
    //..
    Abenmada\BrokenLinkHandlerPlugin\BrokenLinkHandlerPlugin::class => ['all' => true],
]

Then create the config file in config/packages/abenmada_broken_link_handler_plugin.yaml :

imports:
    - { resource: "@BrokenLinkHandlerPlugin/Resources/config/services.yaml" }

Copy the view responsible for displaying the taxon creation form :

mkdir -p templates/bundles/SyliusAdminBundle/Taxon
cp vendor/abenmada/sylius-broken-link-handler-plugin/src/Resources/views/Admin/Taxon/_form.html.twig templates/bundles/SyliusAdminBundle/Taxon/_form.html.twig

Update the entity src/Entity/Product/Product.php :

<?php

declare(strict_types=1);

namespace App\Entity\Product;

use Abenmada\BrokenLinkHandlerPlugin\Model\SlugHistory\ProductSlugHistoryTrait;
use Abenmada\BrokenLinkHandlerPlugin\Validator\SlugExistsInOtherProductSlugHistories;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Sylius\Component\Core\Model\Product as BaseProduct;
use Symfony\Component\Validator\Mapping\ClassMetadata;

/**
 * @ORM\Entity
 * @ORM\Table(name="sylius_product")
 */
#[ORM\Entity]
#[ORM\Table(name: 'sylius_product')]
class Product extends BaseProduct
{
    use ProductSlugHistoryTrait;

    public function __construct()
    {
        $this->productSlugHistories = new ArrayCollection();
        parent::__construct();
    }

    public static function loadValidatorMetadata(ClassMetadata $metadata): void
    {
        $metadata->addConstraint(new SlugExistsInOtherProductSlugHistories([
            'groups' => 'sylius',
        ]));
    }
}

Update the entity src/Entity/Taxonomy/Taxon.php :

<?php

declare(strict_types=1);

namespace App\Entity\Taxonomy;

use Abenmada\BrokenLinkHandlerPlugin\Model\SlugHistory\TaxonSlugHistoryTrait;
use Abenmada\BrokenLinkHandlerPlugin\Validator\SlugExistsInOtherTaxonSlugHistories;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Sylius\Component\Core\Model\Taxon as BaseTaxon;
use Symfony\Component\Validator\Mapping\ClassMetadata;

/**
 * @ORM\Entity
 * @ORM\Table(name="sylius_taxon")
 */
#[ORM\Entity]
#[ORM\Table(name: 'sylius_taxon')]
class Taxon extends BaseTaxon
{
    use TaxonSlugHistoryTrait;

    public function __construct()
    {
        $this->taxonSlugHistories = new ArrayCollection();
        parent::__construct();
    }

    public static function loadValidatorMetadata(ClassMetadata $metadata): void
    {
        $metadata->addConstraint(new SlugExistsInOtherTaxonSlugHistories([
            'groups' => 'sylius',
        ]));
    }
}

Run the migration :

bin/console doctrine:migration:migrate

统计信息

  • 总下载量: 4
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 7
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 7
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2024-11-03