【问题标题】:Output placeholders of modx TV list-boxmodx 电视列表框的输出占位符
【发布时间】:2013-08-31 18:01:48
【问题描述】:

我是 modx 的新手,对 PHP 的了解有限。我正在写一个 sn-p 并在语法上苦苦挣扎。我想输出模板变量列表框的占位符。我试图做的是获取电视列表框 ID 并遍历每个返回 html 的 ID。运气不太好。原谅我的愚蠢。

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

【问题讨论】:

  • 什么“staffVar”电视类型?
  • staffVar 只是我正在检索的模板变量的变量名。我已经发现了我犯的一个错误,那就是 $staff 是一个数组。我需要分解它并检索每个 ID 的占位符

标签: php modx modx-revolution modx-resources modx-templates


【解决方案1】:

我得到了我想要的结果。求助于 PHP 和 SQL,而不是 modx 语法。

    $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>';
    }
    }
    }

【讨论】:

    【解决方案2】:

    听起来你想要做的是使用 getResources 插件,并做一个简单的 如果我从问题中理解您的代码,您正在查看当前资源的模板变量并获取它的值,那么您希望在有一些循环时循环联系人。这可以通过直接在模板中使用的 getResources 插件更轻松地完成。假设 ID 为 26 的 TV 是一个逗号分隔的 ID 列表。否则,您必须在将其提供给 &amp;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>
    

    这可以帮助您从 Snippet 中提取 HTML,并允许您完全跳过使用 sn-p。它还可以通过简单地向您的getResources 添加一些参数来更轻松地扩展功能,而不必修改或完全重写您的自定义 sn-p。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 2014-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      相关资源
      最近更新 更多