0

在我正在构建的 CMS 中,记录名称必须是唯一的(它们是 URL 关键字)。为了在博客文章中实现这一点,我试图在 PHP 中为博客文章标题加上 date("Ymd") 前缀。

我有一个“标题”输入文本字段,其中输入了标题,一个“关键字”文本字段自动“插入”标题以将其转换为 URL 关键字。

我无法弄清楚如何在 slugged 标题上加上日期前缀。

这是代码:

<input name="title" type="text" id="title" />

<input name="keyword" type="text" id="slug" />

<script type="text/javascript"> 
$(document).ready(function(){ 
    $("#title").slug();
}); 
</script>

这部分有效。标题成功地变成了带有破折号的关键字,消除了特殊字符等。

我尝试通过添加一个以日期为值的隐藏字段并使用 getElementById 函数访问其值来包含日期。我试图重新编写 javascript 以将 slugged 标题与日期连接起来:

<input type = "hidden" id = "postdate" value = "<?php echo date("Y-m-d"); ?>-" />

<script type="text/javascript"> 
$(document).ready(function(){ 
  var getDate = document.getElementById('postdate');
  var doSlug = $("#title").val();
  var slugString = getDate + doSlug;
   $("slugString").slug();
}); 
</script>

但我显然无法正常使用 javascript。

我追求的输出是:“2013-10-09-title-of-this-blog-post”

我哪里错了?

4

2 回答 2

0

怎么样:

$(document).ready(function(){ 
  var getDate = $('#postdate').val(); // get the value of the postdate id, not the element.
  var doSlug = $("#title").val();
  var slugString = getDate + "-" + doSlug;
  $('#title').val(slugString);
  $('#title').slug(); // if needed.
}); 

jQuery slug() 函数将输入值更改为“slugged”。您不能将其设置为“slugString”,因为这是一个变量,而不是 dom 元素。如有必要,您可以在使用 val() 设置后“重新加载”输入值。

编辑修复了@Oswaldo Acauan 发现的 getDate 变量问题

于 2013-10-09T16:34:14.000 回答
0

Working Fiddle

我建议您对插件进行一些调整,以便能够做您想做的事情。正如您在上面的 feedle 中看到的,我添加了两个新的配置参数

prepend: null, // String to be prepended the sluged string
append: null // String to be appended the sluged string

makeSlug函数上我只添加这两个条件

if(typeof settings.append === 'string')
    slug = slug + '-' + settings.append;
if(typeof settings.prepend === 'string')
    slug = settings.prepend + '-' + slug;

现在您可以在字符串的 slugfy 版本之前添加或附加字符串

$("#title").slug({
    prepend: '2010-10-13',
    append: 'YAYY'
});

如果您决定使用这种方法,这里是如何与您的 html 一起使用

$(document).ready(function(){ 
   $("#title").slug({ 
       prepend: $('#postdate').val() 
   });
}); 
于 2013-10-09T16:57:18.547 回答