次の点について支援をお願いします。
IDが「6」と「7」の2つのカスタムフィールドがあります。
Customfield(7)の特定の条件が満たされた場合にのみ、customfield(6)のcustomfield_valueを表示します。したがって、customfield(7)が特定の値である場合にのみ、customfield(6)からのデータを表示する必要があります。
ここに私が書いたコードがありますが、それは機能していません(データのロード時に空白を与えるだけです):
<?php
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('customfield_value', 'virtuemart_product_id', 'virtuemart_custom_id')));
$query->from($db->quoteName('jos_virtuemart_product_customfields'));
$query->where($db->quoteName('virtuemart_custom_id'). ' LIKE '. $db->quote('6'). ' AND '. $db->quoteName('customfield_value') . ' LIKE '. $db->quote('Frozen') . ' AND '. $db->quoteName('virtuemart_product_id'). 'LIKE ' . $db->quote($product->virtuemart_product_id));
$db->setQuery($query);
$results = $db->loadResult();
echo ($results);
?>
以下は、テーブルが現在どのように機能しているかを示す編集済みコードです。通常は約20あるため、4つのカスタムフィールドのみを含めました。
<table style="font-size: 12.5px; width: 100%;" class="orders">
<tr style="border: 1px solid #ffb3b3;">
<th style="text-align:center;border: 1px solid #ffb3b3;">Local ICOS</th>
<th style="text-align:center;border: 1px solid #ffb3b3;">Description</th>
<th style="text-align:center;border: 1px solid #ffb3b3;">Batch ID</th>
<th style="text-align:center;border: 1px solid #ffb3b3;">Temp Zone</th>
</tr>
<?php
// Start the Output
foreach ( $this->products as $product ) {
// Show the horizontal seperator
if ($iBrowseCol == 1 && $iBrowseProduct > $BrowseProducts_per_row) { ?>
<div class="horizontal-separator"></div>
<?php }
?>
<tr style="border-bottom: 1px solid #ffb3b3; height: 30px; display:;">
<!-- ICOS -->
<td style="width: 80px;text-align: center;">
<?php
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('customfield_value', 'virtuemart_product_id')));
$query->from($db->quoteName('jos_virtuemart_product_customfields'));
$query->where($db->quoteName('virtuemart_custom_id') . ' LIKE '. $db->quote('5'). ' AND '. $db->quoteName('virtuemart_product_id') . 'LIKE ' . $db->quote($product->virtuemart_product_id));
$db->setQuery($query);
$results = $db->loadResult();
echo ($results);
?>
</td>
<!-- Description -->
<td style="padding-left: 10px;width: 300px; color: #ff3333;">
<?php echo $product->product_name; ?>
</td>
<!-- BATCH ID (SKU) -->
<td style="width: 80px;text-align: center;">
<?php
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('customfield_value', 'virtuemart_product_id')));
$query->from($db->quoteName('jos_virtuemart_product_customfields'));
$query->where($db->quoteName('virtuemart_custom_id') . ' LIKE '. $db->quote('6'). ' AND '. $db->quoteName('virtuemart_product_id') . 'LIKE ' . $db->quote($product->virtuemart_product_id));
$db->setQuery($query);
$results = $db->loadResult();
echo ($results);
?>
</td>
<!-- Temp Zone -->
<td style="width: 80px;text-align: center;">
<?php
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('customfield_value', 'virtuemart_product_id')));
$query->from($db->quoteName('jos_virtuemart_product_customfields'));
$query->where($db->quoteName('virtuemart_custom_id') . ' LIKE '. $db->quote('21'). ' AND '. $db->quoteName('virtuemart_product_id') . 'LIKE ' . $db->quote($product->virtuemart_product_id));
$db->setQuery($query);
$results = $db->loadResult();
echo ($results);
?>
</td>
</tr>
<?php } ?>
</table>
OK。オプションとして「冷凍」のドロップダウンがあります。 「Frozen」を選択すると、Temp Zoneが「Frozen」の商品のみが表示されます。それぞれに、ドロップダウンの選択に応じて情報を表示するコードを挿入する必要があります。
クエリにいくつかの変更があり、うまくいけばいくつかのデータを出力するはずです。
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select($db->qn(array('customfield_value', 'virtuemart_product_id', 'virtuemart_custom_id')))
->from($db->qn('#__virtuemart_product_customfields'))
->where($db->qn('virtuemart_custom_id') . ' = ' . $db->q('6'))
->where($db->qn('customfield_value') . ' = ' . $db->q('Frozen'))
->where($db->qn('virtuemart_product_id') . '= ' . $db->q($product->virtuemart_product_id));
$db->setQuery($query);
$results = $db->loadObjectList();
var_dump($results);
変更:
LIKE
を=
に置き換えます。類似したものではなく、正確なものと一致させようとしないからです。loadObjectList
を使用します