如何在 OctoberCMS 中停止 slug 生成

How to stop slug generation in OctoberCMS


当我在 OctoberCMS Rainlab 博客标题中写 non-unicode 个字母时,它被转换为这样的英文字母:
موضوع جديد
转换为:modoaa-gdyd
我不想要这个,我只想用连字符替换空格,例如:
موضوع-جديد
我该怎么做?

在您的应用中将此功能添加为帮助程序并重新使用它

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  "موضوع-جدید"

或者使用这个包 Sluggable Persian

嗯,目前看来我们无法扩展 js plugin 用于给定目的

但我们可以扩展插件以不使用 slug 类型

您可以将此代码添加到任何插件的 boot 方法中

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.

抱歉,这不能解决您的全部问题,但可以避免您一次又一次地复制 title 到 slug。

我通过编辑以下文件解决了这个问题:

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

我清空了以下变量:

ARABIC_MAP={},PERSIAN_MAP={} 

并通过替换此行来编辑 slugify 函数:

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

用这个:

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

所以,现在 slug 可以正常接受阿拉伯字符了