Behiry
Behiry

Reputation: 573

How to stop slug generation in OctoberCMS


When I write non-unicode letters in OctoberCMS Rainlab blog title, it's converted to English letters such as this:
موضوع جديد
is converted to: modoaa-gdyd
I don't want this, I want only to replace spaces with hyphen to be for example:
موضوع-جديد
How can I do that?

Upvotes: 1

Views: 856

Answers (3)

Behiry
Behiry

Reputation: 573

I solved this problem by editing the following file:

modules\system\assets\ui\storm-min.js

I emptied the following variables:

ARABIC_MAP={},PERSIAN_MAP={} 

and edited the slugify function by replacing this line:

slug=slug.replace(/[^-\w\s]/g,'') 

with this:

slug=slug.replace(/[^-\w\sء-ي]/g,'') 

so, now the slug accepts Arabic characters normally

Upvotes: 1

Hardik Satasiya
Hardik Satasiya

Reputation: 9715

Hmm for now it seems we are not able to extend js plugin for give purpose

but we can extend plugin to not use slug type

you can add this code to any of your plugin's boot method

boot method is imp

<?php namespace HardikSatasiya\DemoTest;

use System\Classes\PluginBase;

class Plugin extends PluginBase
{
    public function registerComponents()
    {
    }

    public function registerSettings()
    {
    }


    public function boot() {

         \Event::listen('backend.form.extendFieldsBefore', function($widget) {            
            // You should always check to see if you're extending correct model
            if(!$widget->model instanceof \RainLab\Blog\Models\Post) {
                return;
            }

            // now we remove type = slug , and use exact 
            // as type = slug will convert chars ARABIC_MAP to english so
            $widget->fields['slug']['preset']['type'] = 'exact';            
        });         

    }
}

It will not solve your complete problem but it can simply copy your blog-title exactly in to slug, in slug text-box then you need to add / at the beginning and then you also need to place ' ' => '-' (dash at spaces) manually.

sorry this will not solve your whole issue, but just saves you from copying title to slug again and again.

Upvotes: 2

Mahdi Younesi
Mahdi Younesi

Reputation: 7509

Add this function as a helper in your app and reuse it

public static function generateSlug($title)
{
    $title = strtolower($title);

    $title = preg_replace("/[\s-]+/", ' ', $title);

    $title = preg_replace("/[\s_]/", '-', $title);

    return $title;
}

$slug = Helpers::generateSlug('موضوع جدید', '-');
//will produce  "موضوع-جدید"

Or use this package Sluggable Persian

Upvotes: 1

Related Questions