Повтор при импорте данных из XML (Simple XML Parser) PHP - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь извлечь данные из XML, как показано ниже

<list last_update="2018-12-11 17:37:18" listing_count="196">
    <property last_update="2018-12-10 15:02:21">
    <agent>
    <name>
    <![CDATA[ G. G. ]]>
    </name>
    <email>sales29@shadesproperties.ae</email>
    <phone>+971 50 355 4416</phone>
    <license_no>38729</license_no>
    </agent>
    <parking>1</parking>
    <photo>
    <url last_update="2018-10-07 16:31:14" watermark="Yes">
    https://s3-ap-southeast-1.amazonaws.com/mycrm-pro-accounts-v2/property/full/1300/OWWFGpAN3l4tF5eU.jpeg
    </url>
    <url last_update="2018-10-07 16:31:14" watermark="Yes">
    https://s3-ap-southeast-1.amazonaws.com/mycrm-pro-accounts-v2/property/full/1300/ZNBpQDrbx7fSURP6.jpeg
    </url>
    <url last_update="2018-10-07 16:31:14" watermark="Yes">
    https://s3-ap-southeast-1.amazonaws.com/mycrm-pro-accounts-v2/property/full/1300/DKDkGl1DXb5Ec75E.jpeg
    </url>
    <url last_update="2018-10-07 16:31:14" watermark="Yes">
    https://s3-ap-southeast-1.amazonaws.com/mycrm-pro-accounts-v2/property/full/1300/aMUA4rFzFRnr0jru.jpeg
    </url>
    <url last_update="2018-10-07 16:31:14" watermark="Yes">
    https://s3-ap-southeast-1.amazonaws.com/mycrm-pro-accounts-v2/property/full/1300/70UFXHqM7OAo3f5h.jpeg
    </url>
    <url last_update="2018-10-07 16:31:14" watermark="Yes">
    https://s3-ap-southeast-1.amazonaws.com/mycrm-pro-accounts-v2/property/full/1300/sELG0dzNyOxmwlFE.jpeg
    </url>
    <url last_update="2018-10-07 16:31:14" watermark="Yes">
    https://s3-ap-southeast-1.amazonaws.com/mycrm-pro-accounts-v2/property/full/1300/x2S9Q0BvwT1fZUyb.jpeg
    </url>
    <url last_update="2018-10-07 16:31:14" watermark="Yes">
    https://s3-ap-southeast-1.amazonaws.com/mycrm-pro-accounts-v2/property/full/1300/s9MDwWwYKeloiibS.jpeg
    </url>
    <url last_update="2018-10-07 16:31:14" watermark="Yes">
    https://s3-ap-southeast-1.amazonaws.com/mycrm-pro-accounts-v2/property/full/1300/SahPWXAGL0dAMpMg.jpeg
    </url>
    <url last_update="2018-12-10 14:59:07" watermark="Yes">
    https://s3-ap-southeast-1.amazonaws.com/mycrm-pro-accounts-v2/property/full/1300/iAuYR3KfjNRIAJkk.jpeg
    </url>
    </photo>
    <geopoints>55.34016973,25.2242947</geopoints>
    </property>
</list>

Я попытался загрузить данные в импортер (предоставленный Perch CMS) Для импорта в качестве элементов коллекции.

Проблема заключается в том, что у каждого элемента коллекции одинаковыенабор изображений.

взгляните на код PHP, который я использую для извлечения данных.

<?php
include('perch/runtime.php');
$images = array();
$location = array();

$API      = new PerchAPI(1.0, 'my_importer');
$Importer = $API->get('CollectionImporter');
$Importer->set_collection('property');
$Template = $API->get('Template');
$Template->set('content/text', 'content');
$Importer->set_template($Template);
$Importer->empty_collection();
$xml=simplexml_load_file("https://shades.mycrm.com/feed/privatesite/0744a0be5fac33c3b3e69c6b26e97d1e") or die("Error: Cannot create object");

foreach($xml->children() as $propertylisting) {    
foreach($propertylisting->photo->children() as $image_url) {
$images[] = $image_url->__toString(); 
}
    $location[] = $propertylisting->community->__toString(); 
    try {
    $Importer->add_item([
        'reference_number'   =>  $propertylisting->reference_number  ,
        'description_en'          =>  $propertylisting->description_en  ,
        'title_property'            =>  $propertylisting->title_en  ,
        'property_image_1'    =>  $images[0],
         'property_image_2'   =>  $images[1],
        'property_image_3'    =>  $images[2],
        'property_image_4'    =>  $images[3],
        'property_image_5'    =>  $images[4],
        'property_image_6'    =>  $images[5],
        
    ]);    
} catch (Exception $e) {
    die('Error: '.$e->getMessage());
}
} 
$result = array_unique($location);
?> 

Как добавить изображения в импортер уникально.

1 Ответ

0 голосов
/ 11 декабря 2018

Одна проблема, которую я вижу, состоит в том, что вы никогда не очищаете массив $images каждый раз вокруг циклов, так что это будет означать, что вместо создания списка изображений для этого списка они будут накапливаться для всех списков.Так просто сбросить массив для каждого списка свойств ...

foreach($xml->children() as $propertylisting) {    
    // Reset array
    $images = array();
    foreach($propertylisting->photo->children() as $image_url) {
        $images[] = $image_url->__toString(); 
    }
...