1

我正在使用 joomla 做网站。我安装了模块 JXTC Virtuemart 产品墙。但此模块未显示,它显示错误“警告:在第 174 行的 Z:\home\megapolis.loc\www\modules\mod_jxtc_vmwall\tmpl\default_parse.php 中为 foreach() 提供的参数无效”。请帮助解决此错误。这是一个文件 default_parse.php

// Get product params
$product = array('min_order_level' => 0, 'max_order_level' => 0);
$item_params = explode('|', $item->product_params);
foreach($item_params as $aux){
$aux = explode('=',$aux);
if (isset ($aux[1]))
    $aux[1] = str_replace('"', '', $aux[1]);
if ( isset($aux[0]) && isset ($aux[1]) && ((int)$aux[1] > 0) )
    $product[$aux[0]] = $aux[1];
}

// Get Parent data if necessary
if (((!$item->file_url_thumb && !$item->file_url) || (!$item->cid || !$item->product_s_desc || !$item->product_desc || !$item->product_availability)) && $item->parentid) {
$query = 'SELECT vmi.file_url_thumb, vmi.file_url, vmpc.virtuemart_category_id AS cid, vmpb.product_s_desc, vmcb.category_name,'.
        ' vmcb.category_description, vmpb.product_desc, vmp.product_availability FROM #__virtuemart_products AS vmp' .
        ' LEFT JOIN #__virtuemart_products_' . VMLANG . ' AS vmpb ON vmp.virtuemart_product_id = vmpb.virtuemart_product_id' .
        ' LEFT JOIN #__virtuemart_product_categories AS vmpc ON vmp.virtuemart_product_id = vmpc.virtuemart_product_id' .
        ' LEFT JOIN #__virtuemart_categories AS vmc ON (vmpc.virtuemart_category_id = vmc.virtuemart_category_id AND vmc.published = 1)' .
        ' LEFT JOIN #__virtuemart_categories_' . VMLANG . ' AS vmcb ON (vmc.virtuemart_category_id = vmcb.virtuemart_category_id)' .
        ' LEFT JOIN #__virtuemart_product_medias AS vmpi ON (vmp.virtuemart_product_id = vmpi.virtuemart_product_id AND vmpi.ordering < 2)' .
        ' LEFT JOIN #__virtuemart_medias AS vmi ON vmpi.virtuemart_media_id = vmi.virtuemart_media_id WHERE' .
        ' vmp.virtuemart_product_id = ' . $item->parentid . ' AND vmp.published = 1';

$db->setQuery($query);
$aux = $db->loadObject();

if (!$item->product_availability)
    $item->product_availability = $aux->product_availability;

if (!$item->product_desc)
    $item->product_desc = $aux->product_desc;

if (!$item->product_s_desc)
    $item->product_s_desc = $aux->product_s_desc;

if (!$item->file_url_thumb)
    $item->file_url_thumb = $aux->file_url_thumb;

if (!$item->file_url)
    $item->file_url = $aux->file_url;

if (!$item->cid){
    $item->category_description = $aux->category_description;
    $item->category_name = $aux->category_name;
    $item->cid = $aux->cid;
   }
}

// Product url
$producturl = JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' . $item->id . '&virtuemart_category_id=' . $item->cid . $itemID);

// Category url
$categoryurl = JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_category_id=' . $item->cid . $itemID);

// Manufacturer url
$manufacturerurl = JRoute::_('index.php?option=com_virtuemart&view=category&virtuemart_manufacturer_id=' . $item->virtuemart_manufacturer_id . $itemID);

// Product availability
$product_availability_url = JURI::root() . VmConfig::get('assets_general_path') . 'images/availability/' . $item->product_availability;
$product_availability = JHTML::image($product_availability_url, $item->product_availability, array('class' => 'availability'));
//$product_availability = '<img src="' . $product_availability_url . '" alt="' . $item->product_availability . '" />';

// Category description
$cat_desc = strip_tags($item->category_description);
if (!empty($desclen))
$cat_desc = Jstring::trim(Jstring::substr($cat_desc, 0, $desclen)) . '...';

// Product description
$desc = strip_tags($item->product_desc);
if (!empty($desclen))
$desc = Jstring::trim(Jstring::substr($desc, 0, $desclen)) . '...';

// Product image
$imageurl = isset($item->file_url) ? $item->file_url : 'No picture';
$image = '<img src="' . $imageurl . '" alt="' . $item->product_name . '" />';
$image2 = '<img src="' . $imageurl . '" alt="' . $item->product_name . '"' .     $image_height . $image_width . ' />';

// Product thumbmnail
$thumb_url = isset($item->file_url_thumb) ? $item->file_url_thumb : 'No picture';
$thumb = '<img src="' . $thumb_url . '" alt="' . $item->product_name . '" />';

// Product rating
$maxrating = VmConfig::get('vm_maximum_rating_scale', 5);
$rating = empty($item->rating) ? JText::_('COM_VIRTUEMART_RATING') . ' ' .     JText::_('COM_VIRTUEMART_UNRATED') : JText::_('COM_VIRTUEMART_RATING') .     round($item->rating, 2) . '/' . $maxrating;

$itemhtml = str_replace('{category_name}', $item->category_name, $itemhtml);
$itemhtml = str_replace('{raw_category_description}', $item->category_description,     $itemhtml);
$itemhtml = str_replace('{category_description}', $cat_desc, $itemhtml);
$itemhtml = str_replace('{product_flypage}', $producturl, $itemhtml);
$itemhtml = str_replace('{product_url}', $item->product_url, $itemhtml);
$itemhtml = str_replace('{product_sku}', $item->product_sku, $itemhtml);
$itemhtml = str_replace('{product_name}', $item->product_name, $itemhtml);
$itemhtml = str_replace('{raw_description}', $item->product_desc, $itemhtml);
$itemhtml = str_replace('{description}', $desc, $itemhtml);
$itemhtml = str_replace('{manufacturer_name}', $item->mf_name, $itemhtml);
$itemhtml = str_replace('{manufacturer_url}', $manufacturerurl, $itemhtml);

$itemhtml = str_replace('{product_adate}', date($date_format, $item->available_date),     $itemhtml);
while (($ini = Jstring::strpos($itemhtml, "{product_adate")) !== false) {
$fin = Jstring::strpos($itemhtml, "}", $ini);
$filter = Jstring::substr($itemhtml, $ini, $fin - $ini + 1);
list($null, $fmt) = explode(' ', Jstring::substr($filter, 1, -1));
$val = date(Jstring::trim($fmt), $item->available_date);
$itemhtml = str_replace($filter, $val, $itemhtml);
}

$itemhtml = str_replace('{product_availability}', $product_availability, $itemhtml);
$itemhtml = str_replace('{product_availability_url}', $product_availability_url,     $itemhtml);

$itemhtml = str_replace('{product_cdate}', date($date_format, $item->created_on),     $itemhtml);
while (($ini = Jstring::strpos($itemhtml, "{product_cdate")) !== false) {
$fin = Jstring::strpos($itemhtml, "}", $ini);
$filter = Jstring::substr($itemhtml, $ini, $fin - $ini + 1);
list($null, $fmt) = explode(' ', Jstring::substr($filter, 1, -1));
$val = date(Jstring::trim($fmt), $item->created_on);
$itemhtml = str_replace($filter, $val, $itemhtml);
}

$itemhtml = str_replace('{product_weight}', $item->product_weight, $itemhtml);
$itemhtml = str_replace('{product_length}', $item->product_length, $itemhtml);
$itemhtml = str_replace('{product_width}', $item->product_width, $itemhtml);
$itemhtml = str_replace('{product_height}', $item->product_height, $itemhtml);

$itemhtml = str_replace('{product_mdate}', date($date_format, $item->modified_on), $itemhtml);
while (($ini = Jstring::strpos($itemhtml, "{product_mdate")) !== false) {
$fin = Jstring::strpos($itemhtml, "}", $ini);
$filter = Jstring::substr($itemhtml, $ini, $fin - $ini + 1);
list($null, $fmt) = explode(' ', Jstring::substr($filter, 1, -1));
$val = date(Jstring::trim($fmt), $item->modified_on);
$itemhtml = str_replace($filter, $val, $itemhtml);
}

$prices = $calculator->getProductPrices($item->id);
//echo var_dump($prices);

$priceFormated = array();
foreach ( $prices as $name => $product_price  ){
    $priceFormated[$name] = $currency->createPriceDiv($name,'',$prices,true);
}

$itemhtml = str_replace('{price_symbol}', $item->currency_symbol, $itemhtml);
$itemhtml = str_replace('{country_code}', $item->currency_code_3, $itemhtml);

//$itemhtml = str_replace('{cost_price}', $priceFormated['costPrice'], $itemhtml);
//$itemhtml = str_replace('{price_before_tax}', $priceFormated['priceBeforeTax'], $itemhtml);
//$itemhtml = str_replace('{sales_price_temp}', $priceFormated['salesPriceTemp'], $itemhtml);

$itemhtml = str_replace('{base_price}', $priceFormated['basePrice'], $itemhtml);
$itemhtml = str_replace('{base_price_variant}', $priceFormated['basePriceVariant'], $itemhtml);
$itemhtml = str_replace('{base_price_with_tax}', $priceFormated['basePriceWithTax'], $itemhtml);
$itemhtml = str_replace('{discounted_price_without_tax}',     $priceFormated['discountedPriceWithoutTax'], $itemhtml);
$itemhtml = str_replace('{sales_price}', $priceFormated['salesPrice'], $itemhtml);
$itemhtml = str_replace('{tax_amount}', $priceFormated['taxAmount'], $itemhtml);
$itemhtml = str_replace('{sales_price_with_discount}',     $priceFormated['salesPriceWithDiscount'], $itemhtml);
$itemhtml = str_replace('{discount_amount}', $priceFormated['discountAmount'], $itemhtml);
$itemhtml = str_replace('{price_without_tax}', $priceFormated['priceWithoutTax'],     $itemhtml);

$itemhtml = str_replace('{product_price}', $item->product_price, $itemhtml);
$itemhtml = str_replace('{product_rating}', $rating, $itemhtml);
$itemhtml = str_replace('{product_rating_raw}', $item->rating, $itemhtml);
$itemhtml = str_replace('{product_s_desc}', $item->product_s_desc, $itemhtml);
$itemhtml = str_replace('{product_stock}', $item->product_in_stock, $itemhtml);
$itemhtml = str_replace('{product_full_image}', $image, $itemhtml);
$itemhtml = str_replace('{product_full_image_url}', $imageurl, $itemhtml);
$itemhtml = str_replace('{product_image}', $image2, $itemhtml);
$itemhtml = str_replace('{product_thumb_image_url}', $thumb_url, $itemhtml);
$itemhtml = str_replace('{product_thumb_image}', $thumb, $itemhtml);
//$itemhtml = str_replace('{categorythumbnailurl}', $category_thumb_url, $itemhtml);
*174 LINE** //$itemhtml = str_replace('{categorythumbnail}', $category_thumb,     $itemhtml);***
$itemhtml = str_replace('{category_url}', $categoryurl, $itemhtml);
$itemhtml = str_replace('{index}', $index, $itemhtml);


//Generate add to car form
$cart_bar = '<div class="addtocart-area">
<form method="post" class="product js-recalculate" action="index.php" >
    <div class="addtocart-bar">
        <!-- <label for="quantity' . $item->id . '" class="quantity_box">' . JText::_('COM_VIRTUEMART_CART_QUANTITY') . ': </label> -->';
        $quatity_box = '<span class="quantity-box">
            <input type="text" class="quantity-input" name="quantity[]" value="';
            if (isset($product['min_order_level']) && (int) $product['min_order_level'] > 0) {
                $quatity_box .= $product['min_order_level'];
            } else {
                $quatity_box .= $default_qty ? $default_qty : '1';
            }
        $quatity_box .='" />
        </span>
        <span class="quantity-controls">
            <input type="button" class="quantity-controls quantity-plus" />
            <input type="button" class="quantity-controls quantity-minus" />
        </span>';

        $button_lbl = JText::_('COM_VIRTUEMART_CART_ADD_TO');
        $button_cls = 'addtocart-button';
        $button_name = 'addtocart';
        $stockhandle = VmConfig::get('stockhandle', 'none');
        if (($stockhandle == 'disableit' or $stockhandle == 'disableadd') and     ($item->product_in_stock - $item->product_ordered) < 1) {
            $button_lbl = JText::_('COM_VIRTUEMART_CART_NOTIFY');
            $button_cls = 'notify-button';
            $button_name = 'notifycustomer';
        }
        vmdebug('$stockhandle ' . $stockhandle . ' and stock ' .     $item->product_in_stock . ' ordered ' . $item->product_ordered);

        $cart_button = '<span class="addtocart-button">
            <input type="submit" name="' . $button_name . '"  class="' . $button_cls .     '" value="' . $button_lbl . '" title="' . $button_lbl . '" />
        </span>';

        switch($show_qty_box){
            case 'none':
                $cart_bar .= '<!-- '.$quatity_box.' -->'.$cart_button;
            break;
            case 'left':
                $cart_bar .= $quatity_box.$cart_button;
            break;
            case 'right':
                $cart_bar .= $cart_button.$quatity_box;
            break;
            case 'top':
                $cart_bar .= $quatity_box.'<div class="clear"></div>'.$cart_button;
            break;
            case 'bottom':
                $cart_bar .= $cart_button.'<div class="clear"></div>'.$quatity_box;
            break;
        }
        $cart_bar .= '<div class="clear"></div>
    </div>
    <input type="hidden" class="pname" value="' . $item->product_name . '" />
    <input type="hidden" name="option" value="com_virtuemart" />
    <input type="hidden" name="view" value="cart" />
    <noscript><input type="hidden" name="task" value="add" /></noscript>
    <input type="hidden" name="virtuemart_product_id[]" value="' . $item->id . '" />
    <input type="hidden" name="virtuemart_manufacturer_id" value="' .     $item->virtuemart_manufacturer_id . '" />
    <input type="hidden" name="virtuemart_category_id[]" value="' . $item->cid . '" />
</form>
<div class="clear"></div>
</div>';

$itemhtml = str_replace('{form_addtocart}', $cart_bar, $itemhtml);

?
4

1 回答 1

0

如果您尝试对不是数组的变量执行 foreach,则可能会发生为 foreach() 提供的无效参数。也许它“应该”是一个数组,也许你认为它是一个数组,但抱歉——它不是。

检查此链接,

http://php.syntaxerrors.info/index.php?title=Invalid_argument_supplied_for_foreach

于 2012-07-23T14:58:57.050 回答