如何阻止OctoberCMS中的slu generation生成

时间:2018-01-06 09:35:46

标签: laravel slug octobercms octobercms-plugins


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

3 个答案:

答案 0 :(得分:2)

嗯,现在似乎我们无法扩展js plugin以达到目的

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

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

  

boot方法为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';            
        });         

    }
}
  

它无法解决您的完整问题,但只需将blog-title完全复制到slug中,slug text-box然后您需要添加 / 在开始时,您还需要 ' ' => '-' (在空格划线)手动

抱歉,这不会解决您的整个问题,但只是让您免于一次又一次地将title复制到slu。中。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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通常接受阿拉伯字符