0

有一部分代码调用 getProductListJSON javascript 函数,如下所示

$.getJSON(storeRootUrl + "jsoncatalog/product/list/id/"+id, function(jsonObj) {
    renderProductList(jsonObj,sid);
});

它返回图像、产品名称、描述和 ID。

我希望它返回更多信息,例如产品类型,例如“简单、可配置等”

基于布局:

<jsoncatalog_product_list>
        <reference name="content">  
            <block type="paypal_catalog/json_product_list" output="toHtml" name="product_list"/>
        </reference>
    </jsoncatalog_product_list>

查看 app\code\community\Paypal\Catalog\Block\Json\Product\List.php (希望我找对了地方),我可以看到以下代码,我假设它返回了数据。

public function _toHtml()
    {
        try {
            $array = array();
            $category = Mage::registry('pp_current_category');
            if (!is_null($category)) {
                $array = Mage::helper('paypal_catalog')->getProducts($category->getId());
                $this->setCurrenCategoryKey($category->getId());
            } else {
                $array = array('category' => '', 'items' => array());
            }
            return Mage::helper('core')->jsonEncode($array);
        } catch (Exception $e) {
            Mage::logException($e);
            return false;
        }
    }

我在哪里可以添加我需要的额外字段?

我是否走在正确的轨道上,甚至正在查看返回数据的正确模板/php代码?

请帮帮我,我已经2年没有做Magento开发了,所以我必须重新学习分配这些东西......

提前致谢。

4

2 回答 2

1

这确实是他进行输出的地方。但是,您需要更深入地挖掘。看看这一行:

$array = Mage::helper('paypal_catalog')->getProducts($category->getId());

这将填充 jsonEncode 在输出例程中使用的数组。这可能位于app/code/community/Paypal/Catalog/Helper/.

或者,您可以对其进行后处理$array并添加到您的字段中。但是,我强烈反对这样做,因为您可能在辅助方法中拥有更好的运气(和性能)getProducts

祝你好运。

于 2013-08-09T06:07:57.610 回答
0

我最终得到了以下代码,这不是最有效的,但是这个移动应用解决方案列表中的产品永远不会超过 5 个......

将代码添加到:

$array = Mage::helper('paypal_catalog')->getProducts($category->getId());
$this->setCurrenCategoryKey($category->getId());

并做到了:

$array = Mage::helper('paypal_catalog')->getProducts($category->getId());
foreach ($array['items'] as &$productitem) {
    $productId = $productitem['id'];
    $product = Mage::getModel('catalog/product')->load($productId);
    if(!is_null($product)){
        $productitem['type'] = $product->getTypeId();
        //Get all options for product
        $options = array();                 
        $options = $product->getOptions();
        if (count($options) > 0){
            $productitem['hasoptions'] = '1';
        }
        else
        {
            $productitem['hasoptions'] = '0';
        }
        $addTocartUrl = $this->helper('checkout/cart')->getAddUrl($product);
        $productitem['addTocartUrl'] = $addTocartUrl;
    }
    else{
        $productitem['type'] = 'simple';
        $productitem['hasoptions'] = '0';       
    }
}
$this->setCurrenCategoryKey($category->getId());

然后我可以使用以下内容更改我的footer.phtml:

<!-- Product List Template -->
<div id="productListTemplate">
    <li onclick="checkQuickAdd(jQuery(this),'%url%');">
        <div class="product-image">%image%</div>
        <div class="product-content">
            <div class="product-title">%title%</div>
            <div class="product-description"><span class="counter" style="font-weight:bold;font-size:large;"></span> %description%</div>
            <div class="product-price">$%price%</div>
            <div class="quickadd"><a href="#" class="quickaddlink">+</a></div>
        </div>
        <div class="product-id" style="display:none;">%id%</div>
        <div class="product-hasoptions" style="display:none">%hasoptions%</div>
    </li>
</div>

这允许稍后在 js 函数中查询值:

function checkQuickAdd(listitem,url)
{
    var hasOptions = jQuery(listitem).find(".product-hasoptions").text();
    var productId = jQuery(listitem).find(".product-id").text();
    var productTitle = jQuery(listitem).find(".product-title").text();
    if (hasOptions == '0'){

            try {
                jQuery(".ui-loader").css("display","block");
                var cartUrl = "/index.php/test/jsoncheckout/cart/add/product/" + productId;
                var cartno = jQuery(jQuery('.ui-page-active .menu-bar-item.itemright>div')[0]).attr('id').replace("cartCount","");
                var cartCount = jQuery(jQuery('.ui-page-active .menu-bar-item.itemright>div')[0]).text();
                jQuery.ajax( {
                    url : cartUrl,
                    type: "POST",
                    dataType : 'json',
                    contentType: "application/json; charset=utf-8",
                    async: true,
                    cache: false,
                    success : function(data) {
                        //alert("added");
                        var counter = 1;
                        var strCounter = jQuery(listitem).find(".counter").text();
                        if (strCounter != "") { counter = parseInt(strCounter) + 1; }
                        if (cartCount != "") { 
                            cartCount = parseInt(cartCount) + 1; 
                        }
                        else {
                            cartCount = 1;
                        }
                        jQuery(listitem).find(".counter").text(counter);

                        // update cart number
                        updateCartCount(cartCount, cartno);
                        jQuery(".ui-loader").css("display","none");        
                        alert("Added " + productTitle);
                    },
                    fail: function (msg) {
                        jQuery(listitem).find(".product-description").text(msg.d);
                        jQuery(".ui-loader").css("display","none");
                    }
                });
                jQuery(".ui-loader").css("display","none");
            } 
            catch (e) {
                alert(e);
                jQuery(".ui-loader").css("display","none");
            }

    }
    else{
        forwardURL(url);
    }
}

这一定是我很久以来写的效率最低的代码了,但是完成这个的时间非常短。

我很想以更有效的方式做到这一点。

任何建议,将不胜感激!

于 2013-08-12T07:06:51.470 回答