将slug添加到用户(RainLab)OctoberCms

时间:2018-05-08 15:25:19

标签: octobercms octobercms-plugins octobercms-backend october-form-controller october-partial

是否可以在用户表中添加一个slug, 如果有可能,那怎么办?

我像往常一样尝试这样做,但它不适用于表用户

class User extends Model{
use \October\Rain\Database\Traits\Sluggable;

protected $slugs = ['slug' => 'name'];

}

我在用户表中添加了slug字段, 但它仍然是空的

提前谢谢

1 个答案:

答案 0 :(得分:2)

它会有点冗长,但没问题我们会解决它:)

  

有两种方法可以做到。

  1. 将直接字段添加到user表并开始使用它,我们就完成了。
  2. 在数据库中创建其他表UserExtension [显然使用新插件]并将动态关系发送oneToOne添加到此表的用户表中,然后使用关系将所有新数据保存到此表中。
  3.   

    现在我们应该选择1st,因为您似乎只需要一个field所以

    1. 将实际字段添加到表[数据库表]
    2. 扩展backend forms以显示字段[保存数据将自动生效]
    3.   

      创建更新脚本[Class name => AddSlugToUserTable] 文件名将处于snake case => add_slug_to_user_table.php。将此文件添加到插件的updates目录。

      <?php namespace HardikSatasiya\Plugin\Updates;
      
      use Schema;
      use October\Rain\Database\Updates\Migration;
      
      class AddSlugToUserTable extends Migration
      {
          public function up()
          {
              Schema::table('users', function($table)
              {
                  // make it nullable as we are adding it and existing records may not have any data for it so
                  $table->string('slug')->nullable()->index();
              });
      
             // or even you can add converted data to slug field
             // from existing user name
          }
      
          public function down()
          {
              // don't want to mess with data so better be empty
          }
      }
      
        

      现在在version.yaml文件中添加有关此文件的详细信息。创建此文件,如果它不在updates文件夹中。 [此文件对间距非常敏感,因此请使用2个空格作为标签,避免使用额外的空格。]

      1.0.1:
          - Initialize plugin.
      1.0.2:
          - Adding Slug Field to User Table.
          - add_slug_to_user_table.php
      
        

      下一步将添加表单字段到Backend Form将此代码添加到您的plugin.php => boot方法。

      class Plugin extends PluginBase
      {
          [...]
      
          public function boot()
          {
              // Extend all backend form usage
              \Event::listen('backend.form.extendFields', function($widget) {
      
                  // Only for the User controller
                  if (!$widget->getController() instanceof \RainLab\User\Controllers\Users) {
                      return;
                  }
      
                  // Only for the User model
                  if (!$widget->model instanceof \RainLab\User\Models\User) {
                      return;
                  }
      
                  // Add an extra birthday field
                  $widget->addFields([
                      'slug' => [
                          'label'   => 'Slug',
                          'comment' => 'Add Slug To User',
                          'preset'    => [
                               'field' => 'name',
                               'type' => 'slug'
                           ]
                      ]
                  ]);
      
              });
          }
      }
      
        

      现在Logout [如果您已经登录]从后端再次Login,以实现所有这些功能。然后打开User From.

      enter image description here

      您会看到闪亮的新slug字段,该字段可以从name [您可以从预设配置中更改]自动填充

      如果您有任何问题或疑问,请发表评论。