我正在寻找一些代码示例,它将关键字从post发布到内部链接。
在帖子表中我有body属性,其中是post的文本。我制作额外的表"关键字" word和URL属性在哪里。
所以我需要一个脚本,它会自动识别在表格中添加的单词"关键字"并在帖子文本中找到此单词并将此单词转换为超链接。你能帮我吗?
use App\Post;
use App\Category;
use App\Keyword;
public function getSingle($slug) {
// fetch from the DB based on slug
$categoriesall = Category::all();
$post = Post::where('slug', '=', $slug)->first();
// return the view and pass in the post object
return view('news.single')->withPost($post)->withCategoriesall($categoriesall);
}
答案 0 :(得分:0)
这只是你正在建设的
的起点public function getSingle($slug) {
$keywords = Keyword::get()->toArray();
$categoriesall = Category::all();
$post = Post::where('slug', '=', $slug)->first();
$post->text = $this->transform($keywords, $post->text);
return view('news.single', compact('post', 'categoriesall'));
}
private function transform($keywords, $text)
{
//takes 2 parameters
//1st parameter is keywords array
//2nd parameter is text to be transformed
$words = explode(" ", $text); //split wherever we have space
foreach( $words as $key => $value ) {
if ( in_array($value, $keywords) ) {
$words[$key] = "<a href="/search?keywords=" . $value . ">. $value .</a>";
}
}
$paragraph = implode(" ", $words);
return $paragraph;
}
请记住,这是一个起点,因为此解决方案根本没有优化。例如:如果您的文本包含html标记,那么这些标记可能会被转换为锚点,因为此算法使用空格作为分隔符;并且大多数时候html中都有空格。