如何为kartik树视图中单击的每个节点传递节点id?

2023-12-10

我有多个节点。我想在每个节点单击上显示不同的视图。为此,我必须传递节点 ID。下面是我的代码,我试图在其中解释整个场景

`<?=
    TreeView::widget([
        'query' => \common\models\MdcNode::find()->addOrderBy('root, lft'),
        'headingOptions' => ['label' => 'Root'],
        'rootOptions' => ['label'=>'<span class="text-primary">Root</span>'],
        'topRootAsHeading' => true, // this will override the headingOptions
        //'displayValue' => 1,        // initial display value
        'isAdmin' => false,
        'fontAwesome' => true,
        //'nodeView' => '',
        //show => none removes the iconType etc setting under details
        'iconEditSettings'=>['show'=>'none'],

        'toolbar' =>
            [
            TreeView::BTN_REFRESH => false,
            TreeView::BTN_CREATE => false,
            TreeView::BTN_CREATE_ROOT => false,
            TreeView::BTN_REMOVE => false,
            TreeView::BTN_SEPARATOR => false,
            TreeView::BTN_MOVE_UP => false,
            TreeView::BTN_MOVE_DOWN => false,
            TreeView::BTN_MOVE_LEFT => false,
            TreeView::BTN_MOVE_RIGHT => false,
        ],

        'showIDAttribute' => false,
        'showTooltips' => false,

        'showNameAttribute' => false,
        'softDelete' => false,
        'cacheSettings' => ['enableCache' => true],
        //removing the detail below removes the second column of view(s) 1 - 5. Section 5 is being used to render the extra data. See frontend\config\main.php later.
        'mainTemplate'=>'<div class="row">
                        <div class="col-sm-3">
                            {wrapper}
                        </div>
                        <div class="col-sm-9">
                            {detail}
                        </div>
                     </div>',
        'nodeAddlViews' => [
            Module::VIEW_PART_1 => '',
            Module::VIEW_PART_2 => '',
            Module::VIEW_PART_3 => '',
            Module::VIEW_PART_4 => '',
            Module::VIEW_PART_5 => '@backend/views/api/index',
        ]

    ]);
    ?>`

控制器

public function actionIndex() { echo "{Index}"; }

View

<?PHP
  /* @var $this yii\web\View */
  ?>
  

  <p>
    You may change the content of this page by modifying
    the file <code><?= __FILE__; ?></code>.
  </p>

UI

image

当我单击每个节点时,如何将每个节点 id 传递到我的视图? 任何帮助将不胜感激。


使用此答案寻求支持在你的节点视图中,即。 nodeAddlView 位于您的 Treeview 小部件中的变量 nodeAddlView 下,或者位于您的 TreeViewSettings 数组中,其中 nodeAddlView 位于您的 config/main.php 中,您有一个别名,例如。 @app 这是高级应用程序的默认设置,即。未在 common/config/bootstrap.php 下列出,例如。

<?php
Yii::setAlias('@common', dirname(__DIR__));
Yii::setAlias('@frontend', dirname(dirname(__DIR__)) . '/frontend');
Yii::setAlias('@bower', dirname(dirname(__DIR__)) . '/vendor/bower-asset');
Yii::setAlias('@migrations', dirname(dirname(__DIR__)) . '/frontend/migrations');
Yii::setAlias('@console', dirname(dirname(__DIR__)) . '/console');

并且未在此处的 frontend/config/main.php 下与“别名”设置一起列出:

'aliases'=>[
      '@bower'=>'@vendor/bower-asset',
      '@npm'=>'@vendor/npm-asset',
    ],

该别名与路径连接或串联。这个组合位于 模块位于 frontend/config/main.php 中。例如。

'treemanager' =>  [
        'class' => 'kartik\tree\Module',
        'treeViewSettings'=> [
            'nodeView' => '@kvtree/views/_form',    
            'nodeAddlViews' => [
                1 => '',
                2 => '',
                3 => '',
                4 => '',
                5 => '@app/views/krajeeproducttree/product',
        ]]    
       ],

或在 Treeview::widget 参数中,例如。

<?php  
    echo TreeView::widget([
        // single query fetch to render the tree
        'query' => KrajeeProductTree::find()->addOrderBy('root, lft'),
        'nodeView' => '@kvtree/views/_form',    
        'nodeAddlViews' => [
            1 => '',
            2 => '',
            3 => '',
            4 => '',
            5 => '@app/views/krajeeproducttree/product',
         ],  
        'headingOptions' => ['label' => 'Categories'],
        'fontAwesome' => true,      // optional
        'isAdmin' => false,         // optional (toggle to enable admin mode)
        'displayValue' => 1,        // initial display value
        'softDelete' => true,       // defaults to true
        'cacheSettings' => [        
            'enableCache' => true   // defaults to true
        ],
        'hideTopRoot'=>true,
        'treeOptions' => ['style' => 'height:1000px width:900px' ],
        //more detail can be added to the node here eg. $node->id but
        //for security better adding it to the bottom of your
        // view file listed here 
        // eg.   5 => '@app/views/krajeeproducttree/product', 
        // since it automatically carries and is passed the $node variable.
        'nodeLabel' => function($node) {
                             return $node->name . " ". $node->id;
                       },
        //disable the toolbar completely                       
        'toolbar'           => [
                TreeView::BTN_REFRESH => false,
                TreeView::BTN_CREATE => false,
                TreeView::BTN_CREATE_ROOT => false,
                TreeView::BTN_REMOVE => false,
                TreeView::BTN_SEPARATOR => false,
                TreeView::BTN_MOVE_UP => false,
                TreeView::BTN_MOVE_DOWN => false,
                TreeView::BTN_MOVE_LEFT => false,
                TreeView::BTN_MOVE_RIGHT => false,
            ],                 
        'showIDAttribute' => false,
        'showTooltips' => false,
        'showNameAttribute' => false,
        'softDelete' => false,
        'cacheSettings' => ['enableCache' => true],
        //show => none removes the iconType etc setting under details                       
        'iconEditSettings'=>['show'=>'none'],
        //
        'showFormButtons'=>false,
        'breadcrumbs'=>[//'depth'=>null,
                        'glue'=>'&raquo;',
                        'activeCss'=>'kv-crumb-active',
                        'untitled'=>'Untitled'
                       ],
        //removing header below removes the search button and header                       
        //'wrapperTemplate'=>'{header}{tree}{footer}',         
        'wrapperTemplate'=>'{tree}',
        //removing the detail below removes the second column of view(s) 1 - 5
        'mainTemplate'=>'<div class="row">
                            <div class="col-sm-3">
                                {wrapper}
                            </div>
                            <div class="col-sm-9">
                                {detail}
                            </div>
                         </div>'                       
    ]); 
?>

实际节点的 id,或者如果我理解正确的话,扩展 TreeView 模型的自动增量 id 可以简单地通过以下方式检索:

echo "Node id: ". $node->id;

在您创建的视图文件的底部。这是 id:

CREATE TABLE tbl_product (
    id            INT(11)      NOT NULL AUTO_INCREMENT PRIMARY KEY,
    root          INT(11)               DEFAULT NULL,
    lft           INT(11)      NOT NULL,
    rgt           INT(11)      NOT NULL,
    lvl           SMALLINT(5)  NOT NULL,
    name          VARCHAR(60)  NOT NULL,
    icon          VARCHAR(255)          DEFAULT NULL,
    icon_type     TINYINT(1)   NOT NULL DEFAULT '1',
    active        TINYINT(1)   NOT NULL DEFAULT TRUE,
    selected      TINYINT(1)   NOT NULL DEFAULT FALSE,
    disabled      TINYINT(1)   NOT NULL DEFAULT FALSE,
    readonly      TINYINT(1)   NOT NULL DEFAULT FALSE,
    visible       TINYINT(1)   NOT NULL DEFAULT TRUE,
    collapsed     TINYINT(1)   NOT NULL DEFAULT FALSE,
    movable_u     TINYINT(1)   NOT NULL DEFAULT TRUE,
    movable_d     TINYINT(1)   NOT NULL DEFAULT TRUE,
    movable_l     TINYINT(1)   NOT NULL DEFAULT TRUE,
    movable_r     TINYINT(1)   NOT NULL DEFAULT TRUE,
    removable     TINYINT(1)   NOT NULL DEFAULT TRUE,
    removable_all TINYINT(1)   NOT NULL DEFAULT FALSE,
    child_allowed TINYINT(1)   NOT NULL DEFAULT FALSE,
    KEY tbl_product_NK1 (root),
    KEY tbl_product_NK2 (lft),
    KEY tbl_product_NK3 (rgt),
    KEY tbl_product_NK4 (lvl),
    KEY tbl_product_NK5 (active)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1;

但是这个id实际上没有任何意义,因为如果你刷新数据库即。删除之前的记录,自增将从最新的开始 价值。

如果您指的是构成三个不同级别的 3 个单独表中每一个的 id,那么您必须将这些不同的 id 字段插入到树模型中,即。在 childallowed 字段之后,以便您可以使用不同表之一的实际 id 填充这些字段。这是在您的控制器中完成的,如上面的示例所示。当您单击节点时,只会填充 3 个附加 id 字段之一,即。另外两个将为空,例如。

enter image description here

然后,您可以通过在保存信息的表的 url 中使用此 id 来访问每个节点所需的信息。例如。

<?php
   use Yii;
   use yii\helpers\Url;
   use yii\helpers\Html;
?>
<div class="krajeeproducttree-product">
    <br>
        <?php
          if ($node->product_id > 0){
            echo Html::a('<h4>View House Details: ' .$node->name. '</h4>',Url::toRoute(['/product/view','id'=>$node->product_id]));
          }         
          if ($node->productsubcategory_id > 0){
            echo Html::a('<h4>View Street Details: ' .$node->name. '</h4>',Url::toRoute(['/productsubcategory/view','id'=>$node->productsubcategory_id]));
          }         
          if ($node->productcategory_id > 0){
            echo Html::a('<h4>View Postcode Details: ' .$node->name. '</h4>',Url::toRoute(['/productcategory/view','id'=>$node->productcategory_id]));
          }
          echo "Node id: ". $node->id;           
        ?>
    <br>
</div>

Krajee 在下面提到了这一点树模型 -> 模型属性

您可以将自定义字段添加到树模型的数据库表中,并在扩展树模型中设置这些属性。但请注意,如果您需要通过表单读取和保存自定义属性数据,则必须正确设置模型属性。这些属性必须在模型规则中标记为安全,否则它们将无法通过 $model->load 方法进行大规模分配进行保存。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为kartik树视图中单击的每个节点传递节点id? 的相关文章

随机推荐

  • 滞后看不到 mutate 对前一行的影响

    我似乎偶然发现了一个mutate lag ifelse我无法解释的行为 我有以下 简化的 数据框 test lt data frame type c START END START START START START END strings
  • 跳跃列表与二叉搜索树

    我最近遇到了一种称为跳过列表 它似乎与二叉搜索树具有非常相似的行为 为什么要在二叉搜索树上使用跳跃列表 跳过列表更适合并发访问 修改 赫伯 萨特写了一篇article关于并发环境中的数据结构 它有更深入的信息 二叉搜索树最常用的实现是红黑树
  • 在 Ubuntu 中从源存储库升级 git

    我想使用升级 git源存储库在Ubuntu中 正如您所注意到的 最后一个稳定版本是 2 0 2 但我有 1 9 4 我克隆了 git 存储库 但我不知道如何继续 我想以某种方式做到这一点 我可以理解如何与存储库的分支和标签进行交互 所以我不
  • Flutter中如何使用UUID访问数据库?

    我正在使用以下函数来检索 UID FirebaseAuth auth FirebaseAuth instance getUID async final FirebaseUser user await auth currentUser fin
  • 在 SQL 中而不是在 Group By 中选择列

    我一直在尝试查找一些有关如何选择 SQL 中 Group By 语句中未包含的非聚合列的信息 但到目前为止我发现的任何内容似乎都无法回答我的问题 我有一个包含我想要的三列的表格 一个是创建日期 一个是按特定声明 ID 对记录进行分组的 ID
  • 如何将 .map() 与 Promise 结合起来? [复制]

    这个问题在这里已经有答案了 我有一个数组 对于该数组的每个元素 我需要fetch一些数据 取决于元素 并将该数据添加到数组中的元素 为了举个例子 我将模拟fetch带有 Promise 在现实生活中 这将是网络服务的答案 let p new
  • 事件监听器与事件处理程序

    有人可以解释一下在 javascript 中使某些操作调用函数的正确方法是什么吗 我应该使用事件处理程序吗onclick callFunction 或者我应该使用事件监听器 如果是 它们是如何工作的 None
  • 在 Google Document AI API 中指定文档语言

    我正在尝试使用 Google Cloud Document AI 解析手写文档 该文档包含西里尔字符 但 Document AI 有时会检测到带有拉丁字符的单词 有没有办法指定文档的语言 以便无论置信度如何 它都会尝试识别特定语言的单词 这
  • 理解 Java 中的枚举

    什么是 Java 枚举 它们是如何工作的 我可以在哪里使用它们以及如何使用它们 我可以在应用程序中不使用枚举吗 或者它们是否如此强大以至于使用它们比忽略它们更好 Java 5 中的枚举基本上是具有一组预定义实例的类 它们旨在替代整数常量的集
  • 检查用户是否被禁止或帐户实际上不存在。 Instagram,c#

    我没有使用 API 但我一直在像疯子一样研究 API 试图找到与之相关的东西 我现在正在打开该网站并下载所有内容 看看它是否包含 找不到页面 但被禁止的帐户也说了同样的事情 那么有什么已知的方法可以区分这一点吗 拨打电话以获取用户 user
  • “HttpContext.Current”属性的跨线程使用及相关事物

    我从 Essential ASP NET with Examples in C 中读到以下语句 另一个需要了解的有用属性是静态 Current 属性 HttpContext 类的 该属性始终指向当前 所服务的请求的 HttpContext
  • 在 Haskell 中使用工作池运行并行 URL 下载

    我想使用 Control Concurrent AsyncmapConcurrently执行并行下载http conduit 解决方案here不足以满足我的情况 因为我想处理n任务 但限制并发工作人员的数量m where m lt n 这还
  • Eclipse Glassfish,不发布对所需项目的更改

    我的设置如下 我正在使用 Eclipse 版本 Juno Service Release 2 构建 ID 20130225 0426 和 Glassfish 3 1 2 glassfish适配器版本为5 0 1 201201241920 我
  • pip 安装失败,并显示“ValueError:__slots__ 中的'format'与类变量冲突”

    当尝试安装 python 包时progressbar在 OSX El Capitan 上 我收到以下错误 Collecting progressbar Using cached progressbar 2 3 tar gz Complete
  • 对 rxjs 订阅进行反跳和缓冲

    我有一个消息队列处理器 可以将消息提供给服务 q on message m gt service create m then gt m ack catch gt n nack 该服务使用 RxJS Observable 并订阅debounc
  • 如何防止黑客读取/写入 Firebase 数据库

    我有一些关于保护移动应用程序的 firebase 数据库的问题 例如 在反编译 Android 应用程序后 黑客可以获得 firebase api 密钥 然后访问 firebase 数据库 这是正确的吗 假设 我添加了一些安全规则 例如应用
  • Android:禁用所有 EditText 的软键盘

    我正在与一些人一起在 Android 上开发一个对话框EditTexts 我把这条线放在onCreate 为了禁用软键盘 Keypad this getWindow setSoftInputMode WindowManager Layout
  • Bash:仅使用参数扩展查找和替换

    我想更换输入法 input string include circle progress 38px 30px 4eb630 和输出 Output string include circle progress 38px 30px using
  • Android - 从代码构建动态表单

    我必须在我的活动中构建一个动态表单 具体取决于通过 HTTP 检索到的从 XML 填充的数据 这可能是一个或多个RadioGroups 每个恰好有 3 个RadioButtons 在 RadioGroups 之后我需要放置两个EditTex
  • 如何为kartik树视图中单击的每个节点传递节点id?

    我有多个节点 我想在每个节点单击上显示不同的视图 为此 我必须传递节点 ID 下面是我的代码 我试图在其中解释整个场景