fastadmin里面列表搜索如何增加列表不存在的值,使其post的时候顺带提交

admin 2023-03-17 16:35:53 1943

以下是chatgpt回答

要增加列表搜索中不存在的值,可以在页面上添加一个隐藏的表单元素,在搜索时将这个表单元素的值设置为所需的值。当提交表单时,这个表单元素的值也会被一同提交。

以下是实现方法:

  1. 在搜索表单中添加一个隐藏的表单元素,例如:
html复制代码
<form action="{:url('index')}" method="get">
  <div class="form-group">
    <label>名称</label>
    <input type="text" class="form-control" name="name" value="{$Think.get.name}">
  </div>
  
  <!-- 添加一个隐藏的表单元素 -->
  <input type="hidden" name="status" x-model="status">

  <button type="submit" class="btn btn-primary"><i class="fa fa-search"></i></button>
</form>
  1. 在 JavaScript 中使用 x-model 指令绑定这个表单元素的值,例如:
html复制代码
<script>
  function main() {
    return {
      status: '',
      search() {
        // 将 status 变量的值设置为需要搜索的值
        this.status = 'new'; // 假设需要搜索 status 为 'new' 的记录

        // 执行搜索操作
        // ...
      }
    };
  }
</script>
  1. 当执行搜索操作时,将 status 变量的值设置为需要搜索的值。当提交表单时,这个表单元素的值也会被一同提交,并且可以在后端控制器中使用 $this->request->param('status') 来获取这个参数的值。例如:
php复制代码
namespace app\admin\controller;

use think\Request;

class Demo extends Admin
{
    public function index(Request $request)
    {
        // 获取搜索条件
        $where = [];
        $where['name'] = ['like', '%' . $request->param('name') . '%'];

        // 如果 status 参数存在,则添加到搜索条件中
        if ($request->has('status')) {
            $where['status'] = ['=', $request->param('status')];
        }

        // 查询数据
        $list = db('demo')->where($where)->paginate(10);

        // 渲染模板
        return $this->fetch('index', [
            'list' => $list,
        ]);
    }
}

这样就可以在 FastAdmin 的列表搜索中增加列表不存在的值了。

可爱猫?Telegram电报群 https://t.me/ikeaimao

社区声明 1、本站提供的一切软件、教程和内容信息仅限用于学习和研究目的
2、本站资源为用户分享,如有侵权请邮件与我们联系处理敬请谅解!
3、本站信息来自网络,版权争议与本站无关。您必须在下载后的24小时之内,从您的电脑或手机中彻底删除上述内容
最新回复 (2)
  • admin 楼主 2023-3-17 查看全部
    引用 2

    问:这里不要用 Alpine 了fastadmin中未使用Alpine 没有x-model

    非常抱歉我之前的回答中使用了 Alpine.js,因为您的问题涉及到搜索列表,而 Alpine.js 可以方便地处理页面上的交互逻辑,所以我在回答时考虑使用了 Alpine.js。

    对于 FastAdmin 中未使用 Alpine.js 的情况,要增加列表搜索中不存在的值,可以在页面上添加一个隐藏的表单元素,在搜索时将这个表单元素的值设置为所需的值。当提交表单时,这个表单元素的值也会被一同提交。

    以下是实现方法:

    1. 在搜索表单中添加一个隐藏的表单元素,例如:
    html复制代码
    <form action="{:url('index')}" method="get">
      <div class="form-group">
        <label>名称</label>
        <input type="text" class="form-control" name="name" value="{$Think.get.name}">
      </div>
      
      <!-- 添加一个隐藏的表单元素 -->
      <input type="hidden" name="status" id="status-input">
    
      <button type="submit" class="btn btn-primary"><i class="fa fa-search"></i></button>
    </form>
    
    1. 在 JavaScript 中设置表单元素的值。可以在搜索按钮或表单提交事件中设置表单元素的值。例如:
    html复制代码
    <script>
      document.querySelector('#search-btn').addEventListener('click', function() {
        // 将表单元素的值设置为需要搜索的值
        document.querySelector('#status-input').value = 'new'; // 假设需要搜索 status 为 'new' 的记录
    
        // 执行搜索操作
        // ...
      });
    </script>
    

    或者:

    html复制代码
    <script>
      document.querySelector('form').addEventListener('submit', function() {
        // 将表单元素的值设置为需要搜索的值
        document.querySelector('#status-input').value = 'new'; // 假设需要搜索 status 为 'new' 的记录
      });
    </script>
    
    1. 当执行搜索操作时,将隐藏表单元素的值设置为需要搜索的值。当提交表单时,这个表单元素的值也会被一同提交,并且可以在后端控制器中使用 $this->request->param('status') 来获取这个参数的值。例如:
    php复制代码
    namespace app\admin\controller;
    
    use think\Request;
    
    class Demo extends Admin
    {
        public function index(Request $request)
        {
            // 获取搜索条件
            $where = [];
            $where['name'] = ['like', '%' . $request->param('name') . '%'];
    
            // 如果 status 参数存在,则添加到搜索条件中
            if ($request->has('status')) {
                $where['status'] = ['=', $request->param('status')];
            }
    
            // 查询数据
            $list = db('demo')->where($where)->paginate(10);
    
            // 渲染模板
            return $this->fetch('index', [
                'list' => $list,
            ]);
        }
    }
    

    这样就可以在 FastAdmin 的列表搜索中增加列表不存在的值了。

    0
  • admin 楼主 2023-3-17 查看全部
    引用 3

    问:但是Post提交的时候会丢失

    chatgpt:

    如果在提交表单时隐藏的表单元素的值丢失了,可能是因为这个表单元素没有正确地设置值。可以使用 JavaScript 来设置这个表单元素的值。

    以下是一个示例:

    html复制代码
    <form action="{:url('index')}" method="post">
      <!-- 在表单中添加隐藏的表单元素 -->
      <input type="hidden" name="status" id="status-input">
    
      <!-- 其他表单元素 -->
      <div class="form-group">
        <label>名称</label>
        <input type="text" class="form-control" name="name" value="{$Think.get.name}">
      </div>
    
      <!-- 提交按钮 -->
      <button type="submit" class="btn btn-primary" id="submit-btn">搜索</button>
    
      <!-- 使用 JavaScript 设置隐藏表单元素的值 -->
      <script>
        document.querySelector('#submit-btn').addEventListener('click', function() {
          // 设置隐藏表单元素的值
          document.querySelector('#status-input').value = 'new';
        });
      </script>
    </form>
    

    在上面的例子中,当用户点击搜索按钮时,JavaScript 将隐藏表单元素 #status-input 的值设置为 'new'。当用户提交表单时,这个表单元素的值也会被一同提交。

    请注意,在上面的例子中,我将表单的方法设置为 post,因为您提到在提交表单时会丢失这个表单元素的值。如果您仍然使用 get 方法提交表单,并且这个表单元素的值依然丢失,那么可能是因为这个表单元素的值太长而超出了浏览器或服务器的限制,可以尝试缩短这个值的长度。

    0

您可以在 登录 or 注册 后,对此帖发表评论!

返回