【问题标题】:Codeigniter - how to reuse code to generate a block of HTMLCodeigniter - 如何重用代码来生成 HTML 块
【发布时间】:2008-11-28 12:30:37
【问题描述】:

我认为我可能以错误的方式处理此问题,因此我将不胜感激任何 cmets/指导。希望我能足够连贯地解释我想要实现的目标:

  • 我想创建一个 HTML 块 (例如,一个包含用户 profile),我将作为一部分加载 我在大多数页面上的布局 生成。

  • 我也希望能够 在此重新生成内容 来自单独的 URL 的框。这样我就可以使用 AJAX 调用来更新框了。

  • 我不想复制代码 创建这个 HTML。

我很高兴我可以使用 AJAX 调用来初始加载此框,但在我看来这似乎是向服务器添加了不必要的调用?

我认为我可以做到的方法是在我的控制器中有一个方法,它只呈现这个 HTML 块,但是我如何在另一个控制器/视图中请求这个方法的输出?

你会如何处理这个问题?

提前致谢

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    创建一个视图以生成用户配置文件的 HTML 块,并使用以下方法从控制器调用它:

    $user_html = $this->load->view('user_view', $user_data, true);
    

    第三个参数以字符串形式返回视图而不是显示它。然后可以以通常的方式将其传递给另一个视图。

    $data['user_block'] = $user_html;
    $this->load->view('page_view', $data);
    

    【讨论】:

    • 但是,这不会为您提供可用于 AJAX 调用的单独 URL。
    • 谢谢。所以我想这里的关键是将数据的所有处理都放在模型中,这样我在控制器中的代码就尽可能少了。
    • 我猜如果大部分代码都在模型和视图中,那么控制器实际上并没有做很多事情,所以它只是几行重复的东西
    • 在所有控制器中复制和粘贴相同的代码有点破坏了使用框架和 OOP 的意义。但是我应该 stfu 因为我没有更好的答案。仍在考虑一种更优雅的方式来做到这一点。
    • 唯一可以跨控制器复制的代码大约是三行代码,用于从模型中获取数据,将其传递到 user_view,然后将返回的 html 发送到页面的主视图。
    【解决方案2】:

    就数据而言,您不需要使用 PHP 生成 HTML。您可以使用jQuery 从页面源中的 JSON 对象输出生成必要的元素。然后,您可以在元素达到“domready”状态时在元素上显示一个漂亮的小“加载”动画。

    就重新填充 div 而言,请执行以下操作:

    为您的个人资料制作一个 div 并为其指定一个 ID。 将数据的每个“元素”放入它自己的 p 元素中,并将实际数据包装在 span 元素中。 例如

    名称:Joe Bloggs

    然后只需使用jQuery 遍历dom 并用数据重新填充span。只需确保以正确的“顺序”输出数据即可。

    有任何问题,请随时反馈。

    【讨论】:

    • 我明白你的意思,但我宁愿使用 javascript 来逐步增强网站,而不是依赖它来完成我真正应该能够在服务器端做的事情
    • 请举例说明您希望动态生成的 html 类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    相关资源
    最近更新 更多