[项目推荐] Laravel Wink: 一个简洁的内容发布平台

file

Wink 是一个可以运行在任何新的或者现有的 Laravel 项目上的免费的开源发布平台。它拥有一个干净、高效的后台管理面板,并且为创建内容提供了一个熟悉的 WYSIWYG 编辑器。虽然如此,不过内容如何显示还是完全取决于你。Wink 既兼顾到了 Medium 发布平台的简单性,也可以使用您自己定制的网站控件和自定义选项。

Wink 是作为一个 Laravel 的包来安装的,并且默认使用它自己的数据库链接和验证系统,所以它也可以被添加到现有的项目中去,而不需要修改现有的项目。

Wink 正处于开发的早起阶段,并且正由它的开发者 Mohamed Said 在紧锣密鼓的开发中,目前已经拥有了很多功能,包括:

  • 支持多作者模式
  • 文章创建
  • 页面创建
  • 标签
  • 特色图片
  • Facebook 和 Twitter 的社交元数据

Wink所不能及的事:

Wink 不完全适合新手,它更适用于一个了解 Laravel 生态, 知道怎么安装和配置包,以及部署的人。

Wink 也不是 WP 或者其他 CMS 的替代品。 因为当前版本不支持更换或者修改用户面向的前端主题和排版。所以,完成一个网站并部署会需要一些工作。

Wink 也不适合于只使用成熟软件的用户。 Wink 还处于其婴儿期,还处于开发中。很多时候需要用户持续更新本软件包,和与其对应的代码。

Wink 入门

须知

首先确保你有一个相当新的环境和 Laravel 版本来学习这个手册。由于 Laravel 经常更新和改进,所以我推荐你使用最新、最大的版本。

因此你需要如下环境:

  • Laravel 5.7 (写作本手册时)
  • PHP 7.1.3+
  • Database (MySQL, PostgreSQL, SQLite, 或者 SQL Server)
  • 一个 Laravel 项目--- 创建一个新项目或者使用现存的项目

一旦你有了 Laravel 项目,使用下面的命令安装 Wink :

composer require writingink/wink

一旦 composer 完成,运行下面的命令安装 Wink :

php artisan wink:install

查看下你是不是有了一个  config/wink.php  文件,打开看看里面的选项都有哪些。

你可以看到  'database_connection' => env('WINK_DB_CONNECTION', 'wink') 这个选项,这个就是 Wink 默认使用的数据库链接,这样做的目的也是为了避免干扰现有的数据库。

你可以通过添加位于 'connections' => [ ... ] 中的 'mysqlforwink' => [ ... ] 来更新更新  config/databases.php  文件,从而去创建一个新的数据库链接,或者你也可以使用现有的数据库链接。当然前提是要确保你定义的任何属性都要在  .env  文件中正确配置。

在  config/wink.php 文件中你也可以改变上传文件的存储路径和管理后台的路径。默认的管理后台路径是:「 yourproject.test/wink 」。

一旦配置完成,让我们愉快的运行下面的命令吧:

php artisan wink:migrate

这个命令将创建必要的数据库结构,Wink 创建的数据表如下:

| migrations |

| wink_authors |

| wink_pages |

| wink_posts |

| wink_posts_tags |

| wink_tags |

如果这你一步你搞定了,那么你将看到如下图片:

file

记下用户名和密码并导航到「 yourproject.test/wink 」(或在 config/wink.php 中设置后缀的任何内容)你应该看到这个屏幕:

file

使用提供的详细信息登录管理面板。

file

管理面板非常简单且易于使用,因此请继续更新您的个人资料,添加团队成员,创建标签, 页面和帖子!您可以从每个页面或帖子的设置中设置 SEO 友好的 URL 。

file

博客文章可以使用气泡菜单进行格式化,这对 Medium 用户来说非常熟悉。

file

因此,下一步将是在您的网站上显示这些帖子,我们将为您提供基础知识,然后由您决定如何格式化帖子以及您要显示哪些信息。

控制器代码

创建一个 BlogController.php 控制器并且添加代码如下:

use Wink\WinkPost;

public function index()
  {
      $posts = WinkPost::with('tags')
          ->live()
          ->orderBy('publish_date', 'DESC')
          ->simplePaginate(12);
      return view('blog.index', [
          'posts' => $posts,
      ]);
  }

这将获取所有带关联标签的实时文章,并且按照发布时间降序排序,如果你在你的视图中应用了分页控制器的话,这里将每页显示 12条数据。

如果要通过别名显示单独的文章,需要添加下面的一段代码到控制器中:

public function show ($slug)
  {
    $post = WinkPost::live()->whereSlug($slug)->firstOrFail();

    return view('post.index', [
          'post' => $post
    ]);
  }

这就可以按照文章的别名来显示文章的内容了,其他情况则会返回一个 404 错误。

Blade 视图代码

在你的 Views 文件夹,创建一个 Blog 文件夹,并且在其中创建一个 index.blade.php 的文件。如果你在使用框架结构来设置布局的话,请按照此需求设置。然后在你页面的 body 部分添加如下代码:

@foreach($posts as $post)
    <div>
      <a href="/blog/{{ $post->slug }}">
        <img src="{{ $post->featured_image }}">
      </a>
    </div>
    <div>
      <a href="/blog/{{ $post->slug }}">
        <h5>{{ $post->title }}</h5>
        <p>{{ $post->excerpt }}</p>
      </a>
    </div>
    <div>
      <small>Publication Date: {{ $post->publish_date }}</small>
    </div>
    <hr />
@endforeach

这会显示一个简单的带标题、摘要、图像和发布日期的文章列表,列表中的每一项都带了链接,指向到独立的博客文章页面。

当然,如果你需要分页的话,不要忘了添加  {{ $posts->links() }} 。

接下来,创建一个post文件夹,里面有一个 index.blade.php 。 在页面主体中,添加:

<h1>{{ $post->title }}</h1>
<img src="{{ $post->featured_image }}">
<div> {!! $post->body !!} </div>

这将显示帖子内容(注意 {!! !!} 标记在 $post->body 左右以便正确呈现 html )。

路由代码

在您的 routes/web.php 文件中,添加以下内容:

Route::get('/blog', 'BlogController@index'); Route::get('blog/{slug}', 'BlogController@show');

现在去到「 yourproject.test/blog 」查看您的帖子列表并单击文章查看帖子内容。 个人帖子将位于 「 yourproject.test/blog/post-slug-name 」。

接下来,请随意定制外观以适合您的网站设计。

深入一点点

你的文章如何显示完全取决于你,你可以按照日期、作者或者标签进行过滤,例如:

如果你想要添加 Medium 风格的预计阅读时间,你需要使用下面的代码创建一个简单的帮助函数用来返回预计的阅读时间(这是一个很基础的实现,不过却能满足你的要求):

if (! function_exists('readingTime')) {
    function readingTime($post) {
       $word = str_word_count(strip_tags($post));
       $m = floor($word / 200);  // 按每分钟阅读 200个单词计算的
       $est = $m . ' minute' . ($m == 1 ? '' : 's');
       return $est;
  }
}

设置好了后只要在视图中调用一下就行 {{ readingTime($post->body) }}  。

总结

我们希望这篇入门指南在帮助到你们的同时,也能让你们关注下我们 Wink 这个为现有项目或者新项目创建的发布平台。我们已经有许多粉丝了,我们在 Welcm Software (我们自己的博客也在用)进行交流。同时,我们也期待 Mohamed 和 Winks 的贡献者接下来会加入什么新的功能。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://medium.com/@welcm/laravel-wink-a...

译文地址:https://learnku.com/laravel/t/22789

本帖已被设为精华帖!
本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

wink 如何根据自己业务做调整 因为所有相关代码都在vendor 里 所以会有种无从下手的感觉

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!