Yii2 显示/隐藏 kartik 树视图节点 [英] Yii2 Show/Hide kartik treeview nodes

查看:37
本文介绍了Yii2 显示/隐藏 kartik 树视图节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用

我想做什么

现在我只想显示指定的节点及其子节点,并向该用户隐藏其他节点

控制器

目前,我正在渲染树结构的视图有两种,但将来会有更多

  1. 我的首页

    公共函数 actionIndex(){if(Yii::$app->user->isGuest){$this->redirect(Yii::$app->urlManager->createUrl('site/login'));}返回 $this->render('index');}

  2. 本身的树管理器节点控制器

    /*** 通过 ajax 查看、创建或更新树节点** @return 混合 json 编码响应*/公共函数 actionManage(){静态::checkValidRequest();$data = static::getPostData();$nodeTitles = TreeSecurity::getNodeTitles($data);$callback = function () use ($data, $nodeTitles) {$id = ArrayHelper::getValue($data, 'id', null);$parentKey = ArrayHelper::getValue($data, 'parentKey', '');$parsedData = TreeSecurity::parseManageData($data);$out = $parsedData['out'];$oldHash = $parsedData['oldHash'];$newHash = $parsedData['newHash'];/*** @var 模块 $module* @var 树 $treeClass* @var 树 $node*/$treeClass = $out['treeClass'];if (!isset($id) || empty($id)) {$node = 新 $treeClass;$node->initDefaults();} 别的 {$node = $treeClass::findOne($id);}$module = TreeView::module();$params = $module->treeStructure + $module->dataStructure + ['节点' =>$节点,'父密钥' =>$parentKey,'treeManageHash' =>$newHash,'treeRemoveHash' =>ArrayHelper::getValue($data, 'treeRemoveHash', ''),'treeMoveHash' =>ArrayHelper::getValue($data, 'treeMoveHash', ''),] + $出;if (!empty($data['nodeViewParams'])) {$params = ArrayHelper::merge($params, unserialize($data['nodeViewParams']));}if (!empty($module->unsetAjaxBundles)) {$cb = 函数($e)使用($module){foreach ($module->unsetAjaxBundles 作为 $bundle) {unset($e->sender->assetBundles[$bundle]);}};Event::on(View::class, View::EVENT_AFTER_RENDER, $cb);}TreeSecurity::checkSignature('manage', $oldHash, $newHash);return $this->renderAjax($out['nodeView'], ['params' => $params]);};返回 self::process($回调,Yii::t('kvtree', '查看 {node} 时出错.请稍后再试.', $nodeTitles),空值);}

我怎样才能实现它?任何帮助将不胜感激.

解决方案

实现隐藏/显示某些节点​​的一种方式可能如下:

  • 在视图中你应该有你的数据库表名.

  • 查找您感兴趣的表名.

  • 在表名的文件夹内应该有如下文件名:_form.php、_script.php 和 index.php

  • index.php 文件应该有一些用处,其中应该有:...

    使用kartik\tree\TreeView;

    使用kartik\tree\Module;

...

  • 在这些 use 语句之后,您可以添加以下代码:

    /** @var integer $uid */

    //获取当前登录的用户 ID.//这用于控制显示树的内容,和//控制表单域.if (isset(Yii::$app->user)) {$uid = Yii::$app->user->getId();}

  • 所以现在登录的用户ID保存在变量$uid

  • 在同一个 index.php 文件中,您应该有呈现树视图的代码.开头是:echo TreeView::widget

  • 在这个 TreeView::widget([.. 你可以添加一个查询,它只呈现当前登录的用户内容,像这样:

    '查询' =>YourTableName::find()->where(['user_id' => $uid])->addOrderBy('root, lft'),

...其他设置...

如果您希望管理员查看或更改内容,您可以添加一个控制器,例如名为 AdminController,然后在这个 index.php TreeView::widget 中您可以添加更多这样的选项:

echo TreeView::widget(['查询' =>YourTableName::find()->where(['user_id' => $uid])->addOrderBy('root, lft'),'headingOptions' =>['标签' =>'你的标签名'],//'rootOptions' =>['标签' =>'<span class="text-success">Root</span>'],'fontAwesome' =>错误的,'isAdmin' =>真的,'showInactive' =>AdminController::isAdmin(),'显示值' =>0,'showIDAttribute' =>真的,'emptyNodeMsg' =>'在这里输入一些信息......','showCheckbox' =>错误的,'多个' =>错误的,'选项' =>['id' =>'树ID'],'allowNewRoots' =>错误的,'工具栏' =>['创建' =>['始终禁用' =>真的],//'删除' =>['始终禁用' =>!(AdminController::isAdmin())],//'上移' =>['始终禁用' =>!(AdminController::isAdmin())],//'下移' =>['始终禁用' =>!(AdminController::isAdmin())],//'向左移动' =>['始终禁用' =>!(AdminController::isAdmin())],//'向右移动' =>['始终禁用' =>!(AdminController::isAdmin())],//'删除' =>错误的,],'cascadeSelectChildren' =>错误的,//'softDelete' =>错误的,'iconEditSettings'=>['显示' =>'列表','列表数据' =>[//'文件夹' =>'文件夹','文件' =>'文件','星' =>'星星','铃' =>'钟',//'电话' =>'电话',]],'缓存设置' =>['启用缓存' =>真的],'nodeAddlViews' =>[模块::VIEW_PART_1 =>'@app/views/mappings/_form',],]);

  • 这只是一个小小的开始,但您可以更进一步.例如,假设用户未登录或假设您想以任何方式显示某些节点​​.在这些情况下,您可以使用 switch case 语句并检查例如 $uid 是否未定义(未设置,因为用户未登录)在这种情况下,您可以要求用户登录或呈现或显示不同的树视图:

    开关($SomeVariable){案例case_to_check":echo TreeView::widget([...'查询' =>TableName::find()->where(['user_id' => $uid])->addOrderBy('root, lft'),...休息;
    案例another_case":echo TreeView::widget([...休息;默认:echo TreeView::widget([...

== 你也可以在 index.php 的顶部添加 html select,像这样:


                
            
发送“验证码”获取 | 15天全站免登陆