drupal:从字符串创建 slug 的标准方法
此上下文中的 slug 是一个字符串,可以安全地在 url 或 css 上用作标识符。例如,如果您有以下字符串:
I'd like to eat at McRunchies!
它的 slug 将为:
i-d-like-to-eat-at-mcrunchies
我想知道是否有在 Drupal(或 drupal 提供的 php 函数)上构建此类字符串的标准方法。更准确地说,在 Drupal 主题内。
上下文:我正在修改 drupal 主题,以便它生成的节点的 html 将其分类术语作为其包含的 div 上的 css 类包含在内。问题是,其中一些术语的名称不是有效的 css 类名称。我需要“粘住”它们。
我读到有些人只是这样做:
str_replace(" ", "-", $term->name)
这对我来说还不够。它不会将大写字母替换为小写字母,但更重要的是,不会将非 ascii 字符(如 à 或 é)替换为相应的 ascii 字符。它也不会从开头和结尾删除“分隔符字符串”。
drupal 6(或php库)中是否有一个函数可以提供一种对字符串进行slugify的方法,并且可以在drupal主题的template.php文件上使用?
A slug on this context is a string that its safe to use as an identifier, on urls or css. For example, if you have this string:
I'd like to eat at McRunchies!
Its slug would be:
i-d-like-to-eat-at-mcrunchies
I want to know whether there's a standard way of building such strings on Drupal (or php functions available from drupal). More precisely, inside a Drupal theme.
Context: I'm modifying a drupal theme so the html of the nodes it generates include their taxonomy terms as css classes on their containing div. Trouble is, some of those terms' names aren't valid css class names. I need to "slugify" them.
I've read that some people simply do this:
str_replace(" ", "-", $term->name)
This isn't really a enough for me. It doesn't replace uppercase letters with downcase, but more importantly, doesn't replace non-ascii characters (like à or é) by their ascii equivalents. It also doesn't remove "separator strings" from begining and end.
Is there a function in drupal 6 (or the php libs) that provides a way to slugify a string, and can be used on a template.php file of a drupal theme?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
您可以使用内置的 Drupal 函数来执行此操作。
函数将为你解决问题。
You can use built in Drupal functions to do this.
functions will do the trick for you.
我是一个快乐的 Zen 主题用户,因此我遇到了它附带的这个美妙的功能:zen_id_safe http://api .lullabot.com/zen_id_safe
它不依赖于任何其他主题功能,因此您只需将其复制到您的模块或主题并使用它即可。这是一个非常小且简单的函数,所以为了方便起见,我将其粘贴到这里。
<代码>
i am a happy Zen theme user, thus i've met this wonderful function that comes with it: zen_id_safe http://api.lullabot.com/zen_id_safe
it does not depend on any other theme function, so you can just copy it to your module or theme and use it. it is a pretty small and simple function, so i will just paste it here for convenience.
我最终使用了
slug
函数 解释在这里(在文章末尾,您必须点击才能看到源代码) 。这可以满足我的需要,并且还可以做更多事情,而不需要包含外部模块等。
粘贴以下代码以便将来参考:
I ended up using the
slug
function explained here (at the end of the article, you have to click in order to see the source code).This does what I need and a couple things more, without needing to include external modules and the like.
Pasting the code below for easy future reference:
您还可以将 d7 中的内容复制到您的项目中:
http://api.drupal。 org/api/function/drupal_clean_css_identifier/7
There's also this from d7 which you can copy to your project:
http://api.drupal.org/api/function/drupal_clean_css_identifier/7
对于 Drupal 8/9,您可以使用 Html::getClass
不要忘记在模块内需要时包含名称空间
For Drupal 8/9 you can use Html::getClass
Don't forget to include the namespace when needed inside module
这可能会有所帮助,我发现我现在一直在做这种重击,而不是使用 id 号作为表中的唯一键。
使用此规则和 .htaccess 规则意味着您可以直接从以下网址进入:
/articles/my-pops-nuts-may-2010
直接进入表查找,而无需取消映射 ID(自然应用合适的过滤器)。
可选择附加或前置某种日期,以便根据需要强制执行一定程度的唯一性。
华泰
This might help, I find I am doing this slugging all the time now rather then use id numbers as unique keys in my tables.
Using this and .htaccess rules means you go directly from a url like:
/articles/my-pops-nuts-may-2010
Straight through to the table look up without having to unmap IDs (applying a suitable filter naturally).
Append or prepend some kind of date optionally in order to enforce a degree of uniqueness as you wish.
HTH
我推荐 path_auto 使用的音译模块。有了它,您可以使用
transliteration_get()
函数。它还进行 unicode 转换。I would recommend the transliteration module which path_auto uses. With it you can use the
transliteration_get()
function. It also does unicode transformation.经过大量试验和错误后,这对我有用,包括将带有特殊字符的法语标题转换为德语标题。
我创建了一个自定义树枝过滤器,因此我可以像这样使用它:
它将转换:
例如
。
如何:
在自定义模块中,创建 services.yml 文件:
modules/custom/mymodule/mymodule.services.yml
创建
modules/custom/mymodule/src/HelperTwigExtensions.php
文件:This is what worked for me after a lot of trial and error, including for converting both French as German titles with special characters to a slug.
I Created a custom twig filter so I can use it like this:
It will convert:
Into:
for example.
HOWTO:
In a custom module, create a services.yml file:
modules/custom/mymodule/mymodule.services.yml
Create the
modules/custom/mymodule/src/HelperTwigExtensions.php
file:您可以使用 preg_replace 和 strtolower :
You can use a preg_replace and strtolower :
在 Drupal 8/9 上,您可以使用 Pathauto Alias Cleaner 服务:
On Drupal 8/9, you can use the Pathauto Alias Cleaner service :