0

我正在开发 Joomla 组件,我们有很多基于用户的功能。我厌倦了编写 if's 来过滤要向用户显示的部分,因此我决定编写某种脚本以使其更容易。所以我的目标是实现这样的模板结构:

<div id="my-component-root">
    <div class="common-content">
    </div>
    <!--{if[admin]}-->
    <div class="admin-content">
    </div>
    <!--{endif[admin]}-->

    <!--{if[captain]}-->
    <div class="captain-content">
    </div>
    <!--{endif[captain]}-->
</div>

因此,生成的模板将被预处理,模板将被生成并传递给视图。(这是普通用户的结果)

<div id="my-component-root">
    <div class="common-content">
    </div>
</div>

我的问题是实现这种模板预处理的最简单方法是什么?

编辑:

就像正常打开 if 标记一样,除了它允许像普通用户一样为精确的用户类型编译模板的简单方法。这样我就不需要编辑几个脚本来更改整个站点的代码..

4

2 回答 2

1

@insanebits 检查下面的代码..

<div id="my-component-root">
    <div class="common-content">
    </div>

    <div class="<?=$userLevel;?>-content">
    </div>
</div>

在哪里$userLevel可以是管理员或普通用户或版主,基于类名会改变......为了实现这一点,你应该有单独的模板,因为admin/user/moderator我已经增强了 Royal Bg 建议......

于 2013-07-19T11:08:56.327 回答
1

我真的取决于你的 HTML 是如何构建的,你真正存储了什么信息以及它有多敏感。

例如,如果您有:

<div id="my-component-root">
    <div class="common-content">
    </div>
    <!--{if[admin]}-->
    <div class="admin-content">
        Welcome %User, You have logged in as Administrator
    </div>
    <!--{endif[admin]}-->

    <!--{if[captain]}-->
    <div class="captain-content">
        Hello, you are not Administrator.
    </div>
    <!--{endif[captain]}-->
</div>

因此,用户带着 userlevel=captain 来到这里,并且div加载了 Captain-content,反之亦然。一切都是静态的,但也是一堆代码。

您还有另一个机会将文本放在存在类的事件上。因此,您可以动态构建类并在构建的类上加载内容,因为@Friend 和我已经在答案和评论中编写了。如果您有敏感内容,这种方式会更加不安全。因为有人可以根据类名编辑您的 HTML 并接收内容。

在现代架构中,内容既不是静态的,也不是写在源代码中的。例如,如果您的逻辑包含 userLevel 逻辑,这意味着您不仅想用“Hello admin”或“Hello user”向他们致敬,还想加载某些允许管理员使用而不允许用户使用的选项。

这样你需要几件事:

  • 在文件中分离管理员允许的功能,即:admin_edit_profile.php ...
  • 制作一个允许在给定占位符上构建文本(翻译方法)的方法
  • 在 level() 传递给 admin_profile.php 的包含文件中进行安全检查,因此应该有类似if ($userLevel != 'admin') die())
  • ** 假设您有一个类 UserLevel 方法roles(),该方法给出了任何人都可以对分配的角色执行什么操作,即如果管理员可以edit_profile。以及level()返回级别(管理员,用户...)的方法**

现在你可以拥有:

<div id="my-component-root">
    <div class="common-content">
    </div>
    <?php foreach($userLevel->roles() as $role):
    <div class="<?=$userLevel->level();?>-content">
        <?php require_once "$userLevel->level()" . "_" . "$role" . ".php"; ?>
        <?= __('placeholder_text_for_translation_for_role' . $role); ?>
    </div>
    <?php endforeach; ?>

现在您可以将翻译后的 ie 的内容存储placeholder_text_for_translation_for_role_edit_profile在数据库中,并在包含后立即返回其翻译(英文文本)。

这样,您将包含带有管理员配置文件编辑选项的文件

<?php require_once "admin_edit_profile.php"; ?>

并为它发短信

<?= "Here you can edit user profiles"; ?>

所以构建的整个内容将是:

<div id="my-component-root">
    <div class="common-content">
    </div>
    <div class="admin-content">
        <?php require_once "admin_edit_profile.php"; ?>
        <?= "Here you can edit user profiles"; ?>
    </div>
于 2013-07-19T11:37:06.867 回答