0

私は modx を初めて使用し、PHP の知識が限られています。私はスニペットを書いていて、構文に苦労しています。テンプレート変数リストボックスのプレースホルダーを出力したい。私がやろうとしたことは、TV リストボックス ID を取得し、html を返すそれぞれをループすることです。あまり運がない。私の愚かさを許してください。

            <?php
            $o='';
            $docid=$modx->resource->get('id');
            $show = $modx->resource->getTVValue('showHideContacts');
            $heading = $modx->resource->getTVValue('contactTitle');

            $staffVar=$modx->getObject('modTemplateVar',26); 
            $staff = $staffVar->getValue($docid);


            if($show =='value1')
            {

            //opening
            $o.='<div class="row">
            <div class="span9">
            <div class="footerContact">
            <h3><i class="icon-mail-circled"></i>'. $heading .'</h3>
            <div class="row">';


            if (!empty($staff)) {
               foreach($staff as $staff) {

                $name = $staff->resource->get('pagetitle');
                $title = $staff->resource->get('longtitle');
                $number = $staff->resource->get('description');
                $email = $staff->resource->get('introtext');

                  $o .= '<div class="span3">
                        <ul class="contactDetails">
                        <li><b>'. $name .'</b></li>
                        <li>'. $title .'</li>
                        <li>'. $number .'</li>
                        <li><a href="mailto:'. $email .'">'. $email .'</a></li>
                       </ul>
                      </div>';
               }
            } 

            //close 
            $o.='
            </div>
            </div>
            </div>
            </div>';


            }
            return $o;
4

2 に答える 2

0

あなたがやりたいことは getResources プラグインを使用することであり、単純なことを行うように思えます。現在のリソースのテンプレート変数を見て、その値を取得する質問からコードを理解している場合は、ループしたいループするものがいくつかある場合の連絡先。これは、テンプレートで直接使用される getResources プラグインを使用すると、より簡単に実現できます。ID が 26 の TV が ID のコンマ区切りリストであると仮定します。そうでなければ、それを与える前にそのようなリストに作り直す必要があります&resources=

[[getResources? &resources=`[[*nameOfTVWithID26]]` &tpl=`yourChunk`]]

どこyourChunkに似ているか

<div class="span3">
    <ul class="contactDetails">
        <li><b>[[+pagetitle]]</b></li>
        <li>[[+longtitle]]</li>
        <li>[[+description]]</li>
        <li><a href="mailto:[[+introtext]]">[[+introtext]]</a></li>
    </ul>
</div>

これにより、スニペット内から HTML を抽出でき、スニペットの使用をまったくスキップできます。getResourcesまた、カスタム スニペットを変更したり完全に書き直したりする代わりに、いくつかのパラメーターを追加するだけで関数を簡単に拡張できます。

于 2013-08-30T06:34:21.617 に答える
0

望んでいた結果が得られました。modx 構文ではなく、PHP と SQL に頼っています。

    $staffVar=$modx->getObject('modTemplateVar',26); 
    $staff = $staffVar->getValue($docid);


    if($show =='value1')
    {

    //opening
    $o.='<div class="row">
    <div class="span9">
    <div class="footerContact">
    <h3><i class="icon-mail-circled"></i>'. $heading .'</h3>
    <div class="row">';

    $totalContacts = explode("||", $staff);
    for($i = 0; $i < count($totalContacts); $i++){
         $id =$totalContacts[$i];

    $stmt = $modx->query("SELECT pagetitle, longtitle, description,introtext
    FROM $table
    WHERE id=$id
    AND published=1
    AND deleted=0
    ORDER BY menuindex ASC
    "
    );

    if ($stmt && $stmt instanceof PDOStatement) {

        while ($row= $stmt->fetch(PDO::FETCH_ASSOC)) {


            $o.='<div class="span3">
            <ul class="contactDetails">
            <li><b>' . $row['pagetitle'] . '</b></li>
            <li>' . $row['longtitle'] . '</li>
            <li>' . $row['description'] . '</li>
            <li><a href="mailto:' . $row['introtext'] . '" >'.$row['introtext'] .'</a></li>
      </ul>
    </div>';
    }
    }
    }
于 2013-08-29T11:58:12.370 に答える