如何在 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 可以正常接受阿拉伯字符了
当我在 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 isimp
<?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, inslug 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 可以正常接受阿拉伯字符了