Laravel内部链接

时间:2017-04-03 23:33:47

标签: laravel laravel-5

我正在寻找一些代码示例,它将关键字从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);
}

1 个答案:

答案 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中都有空格。