Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

Magento Forum

Produktlisting der API erweitern
 
Dscho
Sr. Member
 
Avatar
Total Posts:  236
Joined:  2007-10-05
Singen, Germany
 

Hallo,

ich möchte gerne das Produktlisting der API erweitern.
Also der call catalog_product.list soll zusätzlich Attribute im Output mit ausgeben.

Hat das schon jemand jemand gemacht, bzw. wo muss ich da ansetzen?

Viele Grüße
Dscho

 
Magento Community Magento Community
Magento Community
Magento Community
 
PHOENIX
Guru
 
Avatar
Total Posts:  549
Joined:  2007-12-19
Stuttgart, Germany
 

Für diesen Zweck muss keine API oder Klasse erweitert werden. Öffne die catalog.xml und ergänze folgendes:

<catalog_category_default>
...
        <
reference name="content">
...
                <
block type="catalog/product_list" name="product_list" template="catalog/product/list.phtml">
            <
action method="addAttribute"><attribute>mein_attribut</attribute></action>

Danach kannst du in der list.phtml mit

$_product->getAttributeText('mein_attribute')

oder

$_product->getMeinAttribut()

auf das Attribut zugreifen.

In der view.phtml funktioniert das bereits ohne eine Änderung in der catalog.xml

 
Magento Community Magento Community
Magento Community
Magento Community
 
Dscho
Sr. Member
 
Avatar
Total Posts:  236
Joined:  2007-10-05
Singen, Germany
 

Danke für die Antwort, aber Du meinst Sicherlich die Anpassung des Frontends.
Ich möchte aber die Produktliste der API erweitern und diese extern aufrufen.
Also den call:

$products = $proxy->call($sessionId, ‘product.list’, array($filters));

Mit product.list werden mir zu zu wenig Attribute geliefert.

Gruß
Dscho

 
Magento Community Magento Community
Magento Community
Magento Community
 
timste
Guru
 
Total Posts:  645
Joined:  2007-12-26
Leipzig
 

bei mir kommen aber alle attribute auch so schon mit?
oder verstehe ich etwas falsch?

gruss

 
Magento Community Magento Community
Magento Community
Magento Community
 
Dscho
Sr. Member
 
Avatar
Total Posts:  236
Joined:  2007-10-05
Singen, Germany
 

Hi,

ich mache mal ein Beispiel was ich meine.

$proxy = new SoapClient('http://magentocommerce.com/api/soap/?wsdl');
$sessionId $proxy->login('api_user''api_key');

$filters = array('sku' => array('like'=>'&#x10;%'));
$products $proxy->call($sessionId'product.list', array($filters));
var_dump($products);

Als Ergebnis bekomme ich:

array(317) { [0]=> array(6) { ["product_id"]=> string(3) “170” ["sku"]=> string(10) “eit-100023” ["name"]=> string(28) “RC Rennwagen Metallbaukasten” ["set"]=> string(2) “64” ["type"]=> string(6) “simple” ["category_ids"]=> array(3) { [0]=> string(2) “39” [1]=> string(2) “40” [2]=> string(3) “154” } } [1]=> array(6) { ["product_id"]=> string(3) “179…

Also nur:
- products_id
- sku
- name
- set
- type
- category_ids

Ich möchte aber weitere Attribute gleich in der Liste haben.

Nun habe ich unter app\code\core\Mage\Catalog\Model\Product die Datei api.php gefunden.
Ich vermute ab Zeile 56 wird das Listing ausgegeben. Zumindest laut api.xml wird die Methode
Items aufgerufen.

public function items($filters null$store null)

    .
    . 
    .
        foreach (
$collection as $product{
//            $result[] = $product->getData();
            
$result[] = array( // Basic product data
                
'product_id' => $product->getId(),
                
'sku'        => $product->getSku(),
                
'name'       => $product->getName(),
                
'set'        => $product->getAttributeSetId(),
                
'type'       => $product->getTypeId(),
                
'category_ids'       => $product->getCategoryIds()
            );

Komisch finde ich auch, dass sich da ein Aufruf getData() befindet der auskommentiert ist.
Vermutlich wird damit der ganze Daensatz geladen. Ich teste das mal grin

Viele Grüße
Dscho

 
Magento Community Magento Community
Magento Community
Magento Community
 
timste
Guru
 
Total Posts:  645
Joined:  2007-12-26
Leipzig
 

du musst

$proxy->call($sessionId, ‘product.info’, ‘sku_of_product’)

verwenden grin dann kommen die attribute mit

gruss

 
Magento Community Magento Community
Magento Community
Magento Community
 
Dscho
Sr. Member
 
Avatar
Total Posts:  236
Joined:  2007-10-05
Singen, Germany
 

Ja, aber dann müsste ich für jedes Element aus der Liste die Info aufrufen.
Das dauert ja ewig - es muss doch ein Möglichkeit geben einige Attribute mehr
zu übermitteln.

Mein Test in der api.php hat zar gezeigt, dass ich an der richtigen Stelle bin,
aber auch wenn ich zusätzliche Attribute dem Array zuweise werden diese über
die API nicht ausgelesen.

Ich habe zum Beispiel das Gewicht noch mit angegeben.

$result[] = array( // Basic product data
                
'product_id' => $product->getId(),
                
'sku'        => $product->getSku(),
                
'name'       => $product->getName(),
                
'set'        => $product->getAttributeSetId(),
                
'type'       => $product->getTypeId(),
                
'status'     => $product->getStatus(),
                
'weight'     => $product->getWeight(),                
                
'category_ids'       => $product->getCategoryIds()
            );

Wird aber über die API nicht ausegegben. Wenn ich allerdings Attribute entferne
hat dies schon Auswirkungen aus das Ergebnis. Jetzt stellt sich nur noch die
Frage - wo wird das Result Array-Set definiert???

Gruß
Dscho

 
Magento Community Magento Community
Magento Community
Magento Community
 
Groupion | Johannes
Jr. Member
 
Avatar
Total Posts:  2
Joined:  2009-03-18
Germany
 

Hi Dscho,

hast du inzwischen einen Weg gefunden zusätzliche Attribute direkt in der Liste auszugeben?
Ich hänge gerade an einem ähnlichen Problem.

Viele Grüße,
Johannes

 
Magento Community Magento Community
Magento Community
Magento Community
 
Dscho
Sr. Member
 
Avatar
Total Posts:  236
Joined:  2007-10-05
Singen, Germany
 

Hi,

habe leider bisher noch keine Lösung :-(

Gruß
Dscho

 
Magento Community Magento Community
Magento Community
Magento Community
 
Unicate
Jr. Member
 
Total Posts:  10
Joined:  2009-07-28
 

Gibts hier schon ne Lösung für?

 
Magento Community Magento Community
Magento Community
Magento Community
 
AFTrinodis
Jr. Member
 
Total Posts:  2
Joined:  2011-03-10
 

Mein Post kommt zwar etwa ein Jahr zu spät… aber trotzdem:

public function items($filters = null, $store = null)
{


$collection = Mage::getModel(’catalog/product’)->getCollection()
->addStoreFilter($this->_getStoreId($store))
->addAttributeToSelect(’*’); //hier das ALLES entscheidende!! man ersetzt “*” durch “name”, dann können
//neue attribute hinzugefügt werden, wie etwa getPrice() und diese werden sogar angezeigt!


if (is_array($filters)) {
try {
foreach ($filters as $field => $value) {
if (isset($this->_filtersMap[$field])) {
$field = $this->_filtersMap[$field];
}

$collection->addFieldToFilter($field, $value);
}
} catch (Mage_Core_Exception $e) {
$this->_fault(’filters_invalid’, $e->getMessage());
}
}
//return $collection; //Test!!
//$result = array();


foreach ($collection as $product) {
//$result[] = $product->getData();
$result[] = array( // Basic product data
‘product_id’ => $product->getId(),
‘price’ => $product->getPrice(),
‘weight’ => $product->getWeight(),
‘sku’ => $product->getSku(),
‘name’ => $product->getName(),
‘set’ => $product->getAttributeSetId(),
‘type’ => $product->getTypeId(),
‘category_ids’ => $product->getCategoryIds()
);
}

return $result;
}

 
Magento Community Magento Community
Magento Community
Magento Community
 
AFTrinodis
Jr. Member
 
Total Posts:  2
Joined:  2011-03-10
 

public function items($filters = null, $store = null)
{


$collection = Mage::getModel(’catalog/product’)->getCollection()
->addStoreFilter($this->_getStoreId($store))
->addAttributeToSelect(’*’); //hier das ALLES entscheidende!! man ersetzt “*” durch “name”, dann können
//neue attribute hinzugefügt werden, wie etwa getPrice() und diese werden sogar angezeigt!

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
Back to top