1С: PHP<->XML

Предположим, есть задание выгружать данные из 1С и использовать их в своих WEB-проектах (интернет-магазин с реальным ассортиментом и балансом).

Очень удобно, в этом случае получить от 1С данные в XML, файле, а потом распарсить их и разнести по SQL таблицам.

У нас получилась вот такая вот выгрузка:

<Vitrina Элементов="10">
<Элемент ID="8362217666" ParentID="83014" Товар="100 человек, которые изменили ход истории" Номер="95/2009" Фото="" Витрина="1"/>
<Элемент ID="8362211581" ParentID="6636" Товар="Mens Health mini" Номер="12/2009" Фото="Y:\Company\Общие файлы 1с\Фото\8362211581.jpg" Витрина="2"/>
<Элемент ID="8362201090" ParentID="938" Товар="Newsweek" Номер="47/2009" Фото="" Витрина="3"/>
<Элемент ID="92000054" ParentID="920" Товар="Rolling Stone" Номер="11/2009" Фото="Y:\Company\Общие файлы 1с\Фото\92000054.jpg" Витрина="4"/>
<Элемент ID="8285200104" ParentID="82852" Товар="StarHit" Номер="46/2009" Фото="Y:\Company\Общие файлы 1с\Фото\8285200104.bmp" Витрина="5"/>
<Элемент ID="648900054" ParentID="6489" Товар="Total DVD" Номер="11/2009" Фото="Y:\Company\Общие файлы 1с\Фото\648900054.bmp" Витрина="6"/>
<Элемент ID="687800218" ParentID="6878" Товар="Антенна-Телесемь" Номер="48/2009" Фото="" Витрина="7"/>
<Элемент ID="8362219837" ParentID="83587" Товар="Веселый художник" Номер="23/2009 - 2360" Фото="" Витрина="8"/>
<Элемент ID="8362203118" ParentID="82838" Товар="Empire" Номер="11/2009" Фото="Y:\Company\Общие файлы 1с\Фото\8362203118.jpg" Витрина="9"/>
<Элемент ID="682300047" ParentID="6823" Товар="In Style" Номер="12/2009" Фото="Y:\Company\Общие файлы 1с\Фото\682300047.jpg" Витрина="10"/>
</Vitrina>

Если вы думаете, что работа с  XML в PHP нудна и не целесообразна, спешу разочаровать ;) Весь парсинг сводится к элементарной конструкции:

#загрузим XML файл
$xml = simplexml_load_file('XML/Выгрузка/'.$files[3]);
#данные получаются в виде объектов, представляющие собой массивы
$val = $xml->Элемент[0]['Номер'];
#на экран!
echo $val;

Просто, не правда ли? ;)

Кстати, print_r($xml) выглядит примерно так:

SimpleXMLElement Object ( [@attributes] => Array ( [Элементов] => 10 ) [Элемент] => Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [ID] => 8362217666 [ParentID] => 83014 [Товар] => 100 человек, которые изменили ход истории [Номер] => 95/2009 [Фото] => [Витрина] => 1 ) ) [1] => SimpleXMLElement Object ( [@attributes] => Array ( [ID] => 8362211581 [ParentID] => 6636 [Товар] => Mens Health mini [Номер] => 12/2009 [Фото] => Y:\Company\Общие файлы 1с\Фото\8362211581.jpg [Витрина] => 2 ) ) [2] => SimpleXMLElement Object ( [@attributes] => Array ( [ID] => 8362201090 [ParentID] => 938 [Товар] => Newsweek [Номер] => 47/2009 [Фото] => [Витрина] => 3 ) ) [3] => SimpleXMLElement Object ( [@attributes] => Array ( [ID] => 92000054 [ParentID] => 920 [Товар] => Rolling Stone [Номер] => 11/2009 [Фото] => Y:\Company\Общие файлы 1с\Фото\92000054.jpg [Витрина] => 4 ) ) [4] => SimpleXMLElement Object ( [@attributes] => Array ( [ID] => 8285200104 [ParentID] => 82852 [Товар] => StarHit [Номер] => 46/2009 [Фото] => Y:\Company\Общие файлы 1с\Фото\8285200104.bmp [Витрина] => 5 ) ) [5] => SimpleXMLElement Object ( [@attributes] => Array ( [ID] => 648900054 [ParentID] => 6489 [Товар] => Total DVD [Номер] => 11/2009 [Фото] => Y:\Company\Общие файлы 1с\Фото\648900054.bmp [Витрина] => 6 ) ) [6] => SimpleXMLElement Object ( [@attributes] => Array ( [ID] => 687800218 [ParentID] => 6878 [Товар] => Антенна-Телесемь [Номер] => 48/2009 [Фото] => [Витрина] => 7 ) ) [7] => SimpleXMLElement Object ( [@attributes] => Array ( [ID] => 8362219837 [ParentID] => 83587 [Товар] => Веселый художник [Номер] => 23/2009 - 2360 [Фото] => [Витрина] => 8 ) ) [8] => SimpleXMLElement Object ( [@attributes] => Array ( [ID] => 8362203118 [ParentID] => 82838 [Товар] => Empire [Номер] => 11/2009 [Фото] => Y:\Company\Общие файлы 1с\Фото\8362203118.jpg [Витрина] => 9 ) ) [9] => SimpleXMLElement Object ( [@attributes] => Array ( [ID] => 682300047 [ParentID] => 6823 [Товар] => In Style [Номер] => 12/2009 [Фото] => Y:\Company\Общие файлы 1с\Фото\682300047.jpg [Витрина] => 10 ) ) ) )

Что на само по себе, на деле довольно удобно.

Чтобы примонтировать сетевую шару с 1С-выгрузками, лучше всего использовать autofs.

site sb0y # emerge -av autofs
 
These are the packages that would be merged, in order:
 
Calculating dependencies... done!
[ebuild   R   ] net-fs/autofs-5.0.3-r6  USE="-ldap -sasl" 0 kB
 
Total: 1 package (1 reinstall), Size of downloads: 0 kB
 
Would you like to merge these packages? [Yes/No]

Она корректно примонтирует шару, отключится, если она (шара) вдруг исчезнет из сети или долго не будет использоваться, подключиться назад, если шара появится или понадобится какому-то процессу (например нашему парсеру).

Создадим новую область работы autofs:

echo '/mnt/net /etc/auto.auto  --ghost' >> /etc/auto.master

Настроим эту область

cat /etc/auto.auto 
 
smb -fstype=smbfs,credentials=/etc/smb.auth,iocharset=utf8	 ://server/share

Где credentials указывает на файл, в котором содержатся данные для авторизации:

cat /etc/smb.auth
 
username=login
password=secretPassword

Ну и в завершение – симлинк, в WWW-ROOT сервера, указывающий на папку с выгрузкой.

cd /var/www/magazine/htdocs/
 
ln -s /mnt/net/smb/Общие\ файлы\ 1с/Интернет_магазин/ XML

Теперь XML-файлы доступны по адресу http://ваш-сайт/XML/file.xml. Лучше конечно ограничить к ним доступ, используя .htaccess.

  • Трэкбеки закрыты
  • Комментарии (0)
  1. Комментариев пока нет.



Введите код с картинки