【发布时间】:2023-03-25 16:11:02
【问题描述】:
希望使用 jQuery Bootgrid 创建条件格式化程序/行操作。例如,如果在 PHP 数据中设置了某个值,则显示格式化程序,否则不显示。我找不到任何解决此问题的文档或以前的 stackoverflow 问题。
编辑:
我目前在控制器中执行此操作的方式如下:
$actions = array(
'override' => array(
'icon' => 'flare red',
'link' => '/edit',
'perm' => 'Edit',
'title' => '...',
'condition_and' => array(
'status' => array(
'column' => 'status !=',
'value' => 'Suspended'
),
'registered' => array(
'column' => 'reg ==',
'value' => 'Yes'
)
),
'disabled_icon' => 'flare grey',
'disabled_title' => '...'
)
);
在随后生成网格的函数中,我在遍历数据时解释这些设置。在我看来,唯一仍然是 hacky 的部分是我使用 PHP 循环遍历数据,然后构建一个 JS 字符串来匹配条件:
if (!empty($vv['condition_and']))
{
$check_cond = '+(';
foreach ($vv['condition_and'] as $conk => $conv)
{
$check_cond .= '(row.' . $conv['column'] . ' ' . $conv['operator'] . ' "' . $conv['value'] . '") && ';
}
$check_cond = rtrim($check_cond, ' && ');
$out .= '"\
"' . $check_cond . ' ? "\
<a style=\"margin-right: 8px\" href=\"' . base_url() . $vv['link'] . '/" + row.id + "\"><i title=\"' . $vv['title'] . '\" class=\"zmdi zmdi-hc-lg zmdi-' . $vv['icon'] . '\"></i></a>" : "\
<i style=\"margin-right: 8px;\" title=\"' . $vv['disabled_title'] . '\" class=\"zmdi zmdi-hc-lg zmdi-' . $vv['disabled_icon'] . '\"></i>")+"\
" + ';
}
但如果没有明确的方法可以更好地做到这一点,我会暂时坚持下去。
【问题讨论】:
-
所以你可以将格式化程序用于一行,但不能用于其他行?或者您是否只想根据此值禁用所有行的格式化程序?您能否提供一个示例,说明如何在一些 HTML 标记中从 PHP 设置此值?
-
@Alisson,我想将它用于一行而不是另一行,您的理解是正确的。
-
您是如何加载数据的?您是在使用 ajax 并调用一些 API,还是在使用 PHP 使用循环创建 HTML(例如
<tr>和<td>)? -
是的,使用 Ajax 加载数据并使用循环生成内容。我找到了一种方法来做我想做的事,但它似乎很hacky。我最初的尝试实际上是硬编码的,但我设法让它可重用,所以我现在很高兴,除非有人提出真正的解决方案。不确定我是否应该将我的解决方案作为答案发布。
-
所以你不是在使用 bootgrid 的内置 ajax 加载数据的方式,而是自己发出 ajax 请求并循环传递结果并手动将数据添加到 bootgrid?对于每种加载数据的不同方式,我将尝试发布不同的方式来实现您想要的效果。