0

私は Joomla コンポーネントを開発しており、ユーザーベースの機能がたくさんあります。ユーザーに表示する部分をフィルタリングする if を書くのに飽きたので、簡単にするためにある種のスクリプトを書くことにしました。したがって、私の目標は、このテンプレート構造のようなものを達成することです:

<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>

私の質問は、そのようなテンプレートの前処理を実現する最も簡単な方法は何ですか?

編集:

通常のユーザーのような正確なユーザータイプのテンプレートを簡単にコンパイルできることを除いて、タグの場合は通常のオープニングのようになります。このようにして、サイト全体でコードを変更するためにいくつかのスクリプトを編集する必要はありません..

4

2 に答える 2

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キャプテン コンテンツがロードされ、その逆も同様です。すべてが静的ですが、コードの束でもあります。

クラスが存在する onEvent にテキストを配置する別の機会があります。したがって、クラスを動的に構築し、構築されたクラスにコンテンツをロードすることができます。@Friend と Me は既に回答とコメントに記述されています。機密性の高いコンテンツがある場合、この方法はより安全ではありません。誰かがあなたの HTML を編集し、クラス名に応じてコンテンツを受け取ることができるからです。

現代のアーキテクチャでは、コンテンツは静的でもなく、ソースに記述されていません。たとえば、ロジックに userLevel ロジックが含まれている場合、「Hello admin」または「Hello user」のいずれかで挨拶するだけでなく、管理者には許可され、ユーザーには許可されない特定のオプションもロードする必要があることを意味します。

このように、いくつかのものが必要です。

  • 管理者に許可されている機能をファイルに分けます。つまり、admin_edit_profile.php ...
  • 指定されたプレースホルダーでテキスト構築を可能にするメソッド (翻訳メソッド) を作成します
  • level() が admin_profile.php に渡されるインクルード ファイルでセキュリティ チェックを行います。if ($userLevel != 'admin') die())
  • roles()** クラス UserLevelに、どの役割が割り当てられているかで誰でもできることを与えるメソッドがあると仮定しましょうedit_profilelevel()レベルを返すメソッド(admin、user...) **

これで、次のことができます。

<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 に答える
1

@insanebitsは以下のコードをチェックしてください..

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

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

$userLevelクラス名に基づいて、管理者または通常のユーザーまたはモデレーターにすることができます...これを達成するには、Royal admin/user/moderatorBgの提案を強化したための別のテンプレートが必要です....

于 2013-07-19T11:08:56.327 に答える