Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2015, 20:55   #1
bionicle12
Пользователь
 
Регистрация: 03.09.2010
Сообщений: 10
По умолчанию Работа с xml перебор, подскажите, не могу осилить

Добрый день, пытаюсь сделать загрузку данных из xml, парсер, большую часть данных считывает ок, т.к. они единичные, но есть поле которое используется 4 раза, т.е. 4 раза тэг image. По образу и подобию собрал:
вид самого doc.xml:
Код:
<offer>
                <name>Название товара</name>
                <description>Описание товара.</description>
                <reference>114053642</reference>
                <price>4800</price>
                <wholesale_price>3700</wholesale_price>
                <categoryId>1</categoryId>
                <image>http://site.url/images/06c582541110dd.jpg</image>
                <image>http://site.url/images/934e566b3f6952.jpg</image>
                <image>http://site.url/images/7665a41a3bd99e.jpg</image>
                <image>http://site.url/images/13011d8f3d6da2.jpg</image>
                <param name="Цвет">Черный</param>
                <param name="Материал">Кожа</param>
                <param name="Производитель">Китай</param>
            </offer>
и в пхп:
PHP код:
private $field_names = array();
private 
$heading_info = array('xml_main_tag' => 'offer''xml_name_tag' => 'name', ...)
... 
 
private function 
importProducts()
{
        
//fieldz
        
$this->getHeadings();
        
        
$filename $this->fetchFeed();
        
$product_tag Tools::getValue('xml_main_tag');
        if (
$filename
        {
            while ((
$raw_prod $this->getNext($filename$product_tag)) !== FALSE
            {
                
//add global settings
                
foreach($this->global_settings as $name => $field){
                    if (!empty(
$this->field_names[$field])){
                        
$raw_prod[$field] = $this->field_names[$field];
                    }
                }
               ...
              
//update
             
...
                
//add product
                
$product $this->addProduct($raw_prod);
            }
        }
}
 
private function 
addProduct($raw_prod$update_id 0)
{
        
$product = new Product();
        
//set up default values
        
$this->DefaultValues($product);
                ...
                
//перебираю так почти все поля
        
if (isset($this->field_names['reference']) && !empty($raw_prod[$this->field_names['reference']]))
        {
            
$product->reference $raw_prod[$this->field_names['reference']];
        }
                ...
        
//Add or Update
        
if ($update_id)
        {
            
$action $product->update();
            if (
$action)
                
$this->total_items_updated++;
        }
        else 
        {
            
$action $product->add();
            if (
$action)
                
$this->total_items_added++;
        }
 
        if (
$action)
        {
            if (isset(
$this->field_names['image']))
            {
                if (
Tools::getValue('xml_import_delete_images') && $update_id)
                {
                    
$product->deleteImages();
                }
                else
                {
                    
$image_fields = array($this->field_names['image']);
                }
                
            
$i 1;
                foreach (
$image_fields as $img) [B]//тут image тэг[/B]
                    
{
                                        [
B]//здесь уже ссылка в виде http://, но только первая =([/B]
                        
if (isset($raw_prod[$img]) && !empty($raw_prod[$img])) 
                        {
                        
//fetch image
                        
$image = new Image();
                        
$image->id_product = (int)$product->id;
                        
$image->position Image::getHighestPosition($product->id) + 1;
                        
$image->cover = ($i == 0); //first image is cover
                        
$image->add();
                        
$image->associateTo($this->shops);
                        if(
ImageManager::checkImageMemoryLimit($raw_prod[$img]))
                            {
                                
$this->fetchImage($raw_prod[$img], $image->id$product->id);
                            }
                        
$i++;
                        }
                    }
            }
        }
}
 
 
private function 
_Process()
{
    
$xml simplexml_load_file($filename);
    
$this->xml_prods $xml->xpath("//" Tools::getValue('xml_main_tag')); 
    
$this->importProducts();
}
 
Вызовы к cms 
XML грузится, и перебирает все указанные теги, добавляет каждый товар, на самой же картинке
- скачивает картинку, но только по первой ссылке,
bionicle12 вне форума Ответить с цитированием
Старый 05.07.2015, 20:56   #2
bionicle12
Пользователь
 
Регистрация: 03.09.2010
Сообщений: 10
По умолчанию

...делает ее обложкой, генерирует ей номер, который соответствует папке в которой лежит фото, т.е. там указан не прямой линк, а такая извращенная система, потому таков процесс. А хочу сделать чтобы он выдергивал все ссылки из тэга <image>, т.е. скачивал все фото, что есть под данным тегом.
До <param name= > я пока не добрался, застопорился на картинках.

+ хотел поинтересоваться, возможно ли в php, загружаемые данные из xml делить на куски, чтобы не разом заливать к примеру 1тыс товаров а по 50, 20 раз?
bionicle12 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите осилить MySQL NIKOLEX Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 5 29.01.2015 18:17
Делфи, уравнение с итерацией,кто может осилить?Горит:( infidus Фриланс 7 06.10.2012 21:08
не могу разобраться смакросом (перебор строк) aleks1982 Microsoft Office Excel 5 26.07.2010 15:25
Не могу сделать перебор компонентов в С++ по примеру из Delphi CahekG Общие вопросы C/C++ 1 10.03.2009 18:02