ichaber/silverstripe-swiftype

Use Swiftype search with Silverstripe

Installs: 19 155

Dependents: 0

Suggesters: 0

Security: 0

Stars: 1

Watchers: 5

Forks: 5

Type:silverstripe-vendormodule

2.1.0 2023-06-29 21:24 UTC

This package is auto-updated.

Last update: 2024-10-30 00:10:24 UTC


README

Build Status Scrutinizer Code Quality codecov

Installation

Install with Composer:

composer require ichaber/silverstripe-swiftype

Also see Configuration. Extensions and configurations are not applied automatically.

Documentation

Provides the necessary code for configuring the swiftype integration code with the access key and for adding metadata tags to the site code so the Swiftype crawler can be index them.

The code also provides an extension which triggers a re-index after a page is published/unpublished in the SilverStripe CMS admin area.

How does it work?

MetaTags

There are a bunch of standard SwiftypeMetaTag classes. Each of these classes represents one of the standard SilverStripe SiteTree fields or methods, and will be used to output a single meta tag into your markup.

Here are the standard classes, and which SiteTree field/method they represent:

  • SwiftypeMetaTagDescription (MetaDescription field)
  • SwiftypeMetaTagPublishedAt (LastEdited field)
  • SwiftypeMetaTagTitle (Title field)
  • SwiftypeMetaTagURL (Link() method)

Additionally, there is a robots class, which can be used to output noindex and/or nofollow (configurable) when your SiteTree record has ShowInSearch set to 0. By default, this will render with just noidex, but you can update it's config to also render with nofollow.

  • SwiftypeMetaTagRobots

Templating

If you are using out of the box functionality (see Configuration), then in your template, you can simply use $SwiftypeMetaTags to output all of the meta tags that you have set up as part of your install.

Crawling

If you are using out of the box functionality (see Configuration), then when you publish a page, a request will be sent to Swiftype for it to crawl that page.

Configuration

Simple

If you just want to plug and play, then apply the following three extensions.

SilverStripe\SiteConfig\SiteConfig:
  extensions:
    - Ichaber\SSSwiftype\Extensions\SwiftypeSiteConfigFieldsExtension
SilverStripe\CMS\Model\SiteTree:
  extensions:
    - Ichaber\SSSwiftype\Extensions\SwiftypeSiteTreeCrawlerExtension
    - Ichaber\SSSwiftype\Extensions\SwiftypeMetaTagContentExtension

These will provide you with:

  • The standard CMS fields for adding your Swiftype credentials.
  • A template variable ($SwiftypeMetaTags) for outputting your meta tags.
  • Re-index requests to Swiftype on SiteTree publishing.

You will then need specify which Meta Tags you would like to use. You can do this in two ways.

In a config yaml:

App\Page\MyPage:
  swiftype_meta_tag_classes:
    - Ichaber\SSSwiftype\MetaTags\SwiftypeMetaTagDescription
    - Ichaber\SSSwiftype\MetaTags\SwiftypeMetaTagPublishedAt
    - Ichaber\SSSwiftype\MetaTags\SwiftypeMetaTagRobots
    - Ichaber\SSSwiftype\MetaTags\SwiftypeMetaTagTitle
    - Ichaber\SSSwiftype\MetaTags\SwiftypeMetaTagURL

Or in your model:

class MyPage extends SiteTree
{
    /**
     * @var array
     */
    private static $swiftype_meta_tag_classes = [
        SwiftypeMetaTagDescription::class,
        SwiftypeMetaTagPublishedAt::class,
        SwiftypeMetaTagRobots::class,
        SwiftypeMetaTagTitle::class,
        SwiftypeMetaTagURL::class,
    ];
}

Either of these methods should provide you with good control if you have different page types needing different meta tags.

A quick note on the Robots class

Swiftype uses the standard <meta name="robots" content="noindex"> meta tag, so if you are already outputting this tag through some other means, then you will want to exclude it here. Also see [Customising the robots Meta Tag](#Customising the robots Meta Tag)

Piece by piece

To use the standard SiteConfig CMS fields, you can apply SwiftypeSiteConfigFieldsExtension to your SiteConfig. This will provide you with some basic options to set up a single engine for your site.

Currently there is minimal support for multiple engines on a single site - you will (most likely) need to add your own implementation if you desire this.

SilverStripe\SiteConfig\SiteConfig:
  extensions:
    - Ichaber\SSSwiftype\Extensions\SwiftypeSiteConfigFieldsExtension

If you are using the Swiftype Crawler, and would like to add "re-crawl" actions after your pages un/publish, you can apply SwiftypeSiteTreeCrawlerExtension to SiteTree (or another model of your choice).

SilverStripe\CMS\Model\SiteTree:
  extensions:
    - Ichaber\SSSwiftype\Extensions\SwiftypeSiteTreeCrawlerExtension

If you would like SiteTree to have access to the standard template variable, then apply the following extension.

SilverStripe\CMS\Model\SiteTree:
  extensions:
    - Ichaber\SSSwiftype\Extensions\SwiftypeMetaTagContentExtension

Indexing Files

If you are using the Swiftype Crawler, and would like to add "re-crawl" actions after your Files un/publish, you can apply SwiftypeFileCrawlerExtension to File (or another model of your choice).

SilverStripe\CMS\Model\File:
  extensions:
    - Ichaber\SSSwiftype\Extensions\SwiftypeFileCrawlerExtension

There is also a config to allow certain file types from being indexed/reindexed.

Ichaber\SSSwiftype\Extensions\SwiftypeFileCrawlerExtension:
 reindex_allowed_extensions:
   - pdf

NB: by default this config does not set any extensions to be indexed.

Indexing custom DataObjects

If you want to index your own custom DataObjects, simply create your own crawler extension by extending

Adding your own Meta Tags

You can easily add your own classes to your objects (see Installation).

Any classes that you add are expected to implement SwiftypeMetaTagInterface, but that's about it.

You can also feel free to extend SwiftypeMetaTag, if you would like access to methods like generateMetaTagsString().

Customising the robots Meta Tag

There are two configs available for the robots Meta Tag. These allow you to control whether you add noindex and/or nofollow. By befault, noindex is added, but we allow robots to follow.

Ichaber\SSSwiftype\MetaTags\SwiftypeMetaTagRobots:
  no_index: true
  no_follow: false

You can override these by adding your own config. EG: Adding both noidex and nofollow.

---
Name: app_swiftype_tags
After: swiftype_tags
---
Ichaber\SSSwiftype\MetaTags\SwiftypeMetaTagRobots:
  no_index: true
  no_follow: true

Requirements

  • PHP 7.1 or higher
  • SilverStripe Framework 4.x
  • SilverStripe CMS 4.x