ロードは必要になるまで含まない

私は、互いに参照することによって無限ループを作成しました。
1ページ。私の目的は、ページ(教師と楽器)にポップアップレイヤーを読み込み、お互いにリンクすることです。

{#      include: _layer_instrument      #}

                        {{ teacher.title }} 
{% include "includes/_layer_teacher" %} 

{#     include: _layer_teacher         #}

                        {{ instrument.title }} 
{% include "includes/_layer_instrument" %}  

それらが必要になるまでajaxを使用してインクルードをロードすることは可能ですか?

ベストアンサー

You can create a custom plugin with Pluginfactory.io and check the box for
Controllers but leave the name blank. Copy the
downloaded files into your
path/to/craft/craft/plugins/>>nameofyourplugin<</</code>
directory and install it in your cp.

次に、あなたのコントローラにこのような関数を挿入します

public function actionRenderTemplate(){
    $id = craft()->request->getParam('id');
   //do some checks if the id is valid or not here...

    $html = '';
    $success = false;
    $message = '';

    if($entry = craft()->entries->getEntryById($id)){
       //as example to render different templates based on entry type
        $entryType = $entry->getType()->handle; 
        $html = craft()->templates->render('path/to/your/template/' . $entryType, array(
            'entry' => $entry
        ));
        if($html){
            $success = true;
        }
    }else{
        $message = Craft::t('could not find entry with id ' . $id);
    }

    $this->returnJson([
        'message'   => $message,
        'success'   => $success,
        'html'      => $html
    ]);
}

そしてあなたのJavascriptはこれかもしれない

$('.load-instrument').click(function(){
    var data = {
        action: "pluginname/actionRenderTemplate",
        id: $(this).data('id')
    };
    $.ajax({
        type: "post",
        url: '',
        data: data,
        success: function(data){
            if(data.success === true){
                $("#idOfYourDiv").html(data.html);
            }else{
               //display error messages here
            }
        },
        error: function (XMLHttpRequest, textStatus) {
            console.log("Status: " + textStatus);
        }
    });
});

ドキュメントについては、コントローラおよびテンプレートあなたがここで何をしなければならないかを完全に理解する

編集:あなたのhtmlにすることができます

<button data-id="{{instrument.id}}" class="load-instrument" value="click me">Click me</button>

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です