Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time

Index Notification Section

This bundle allows you to submit your updated/removed documents/objects to a given index - a so called worker. Currently, we only support google via the google index API.

To use this feature, you need to enable it and you also need to add your own resource processor.

Enable Index Notifications

seo:
    index_provider_configuration:
        enabled_worker:
            -   worker_name: google_index
                worker_config:
                    auth_config: config/pimcore/google-api-private-key.json

Enable Pimcore Element Watcher

It's a good idea to enable the pimcore_element_watcher by default. It will auto-submit changed/delete objects/documents to all available processors. The object/documents will be added to a queue automatically (but only if a processor has been found).

seo:
    index_provider_configuration:
        pimcore_element_watcher:
            enabled: true

,

Register Service

App\Seo\ResourceProcessor\MyProcessor:
    tags:
        - { name: seo.index.resource_processor, identifier: my_processor }

Service

<?php

namespace App\Seo\ResourceProcessor;

use Pimcore\Model\DataObject\Concrete;
use SeoBundle\Model\QueueEntryInterface;
use SeoBundle\Worker\WorkerResponseInterface;
use SeoBundle\ResourceProcessor\ResourceProcessorInterface;
use SeoBundle\Exception\WorkerResponseInterceptException;

class MyProcessor implements ResourceProcessorInterface
{
    /**
     * {@inheritDoc}
     */
    public function supportsWorker(string $workerIdentifier)
    {
        return in_array($workerIdentifier, ['google_index']);
    }

    /**
     * {@inheritDoc}
     */
    public function supportsResource($resource)
    {
        if (!$resource instanceof \Pimcore\Model\DataObject\MyObject) {
            return false;
        }

        return true;
    }

    /**
     * {@inheritDoc}
     */
    public function generateQueueContext($resource)
    {
        $queueContext = [];

        if (!$resource instanceof Concrete) {
            return [];
        }

        // if you have multiple languages you need to add your object multiple times!
        foreach (['en', 'de'] as $locale) {
            $queueContext[] = ['locale' => $locale];
        }

        return $queueContext;
    }

    /**
     * {@inheritDoc}
     */
    public function processQueueEntry(QueueEntryInterface $queueEntry, string $workerIdentifier, array $context, $resource)
    {
        $dataUrl = null;
        $locale = $context['locale'];
        
        $linkGenerator = $this->fetchMyObjectLinkGenerator();
        $link = $linkGenerator->generate($resource, ['locale' => $locale]);

        $queueEntry->setDataType('object');
        $queueEntry->setDataId($resource->getId());
        $queueEntry->setDataUrl($link);

        return $queueEntry;
    }

    /**
     * {@inheritDoc}
     */
    public function processWorkerResponse(WorkerResponseInterface $workerResponse)
    {
        // There are already some basic logs in your application logger!
        // @todo: add custom "nice" log to a specific output...

        // throw intercepted response exception.
        // this will stop SEO Bundle from logging default data to application logger.
        // if you want to keep the logging, just remove this exception.
 
        throw new WorkerResponseInterceptException();
    }
}