· 8 years ago · Apr 14, 2018, 04:40 AM
1Цель и задачи парÑера:
2ПрикреплÑть картинки к товарам, находÑщимÑÑ Ð² базе данных
3
4Логика:
5Картинки лежат в одной папке и имеют имена ÐРТИКУЛ.jpg, ÐРТИКУЛ-1.jpg, ÐРТИКУЛ-2.jpg
6Ð’ табличке 1 - modx_site_content ÑодержатÑÑ Ð²Ñе объекты базы данных, товары - Ñто Ñтроки Ñ template=4
7Ð’ табличке 2 - ÑодержатÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹ Ñ Ð¿Ñ€Ð¸Ð²Ñзкой к товару
8
9Ð’ табличке 2 ÑодержатÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹. Они привÑзываютÑÑ Ðº товарам полем contentid
10id - autoincrement
11tmplvarid - код параметра(артикул имеет код 1) (коды параметров должны быть вынеÑены вверх файла отдельными переменными, чтобы их можно было легко поменÑть)
12contentid - привÑзка к товару(к полю Id из таблицы товаров)
13value - значение параметра
14
15Картинки будут привÑзыватьÑÑ Ðº товару по артикулу
16Сама картинка ÑвлÑетÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ товара
17У товара может быть 3 картинки, Ð¿ÐµÑ€Ð²Ð°Ñ Ð¸Ð¼ÐµÐµÑ‚ tmplvarid = 4, Ð²Ñ‚Ð¾Ñ€Ð°Ñ tmplvarid = 5, Ñ‚Ñ€ÐµÑ‚ÑŒÑ tmplvarid = 6
18Ðртикул тоже ÑвлÑетÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ товара
19Ðртикул имеет tmplvarid = 1
20(Ñти 4 переменные(id трех картинок и артикула должны быть вынеÑены в начало Ñкрипта, чтобы их их можно было поменÑть) + переменнаÑ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ñ‚Ð²ÐµÑ‡Ð°ÐµÑ‚ за типа объекта - template = 4 - тоже должна быть вынеÑена в начало)
21
22Ðужно взÑть из таблички 1 вÑе товары c артикулами(примерно так):
23select v.value FROM `modx_site_content` c left join `modx_site_tmplvar_contentvalues` v on c.id = v.contentId WHERE c.template=4 AND v.tmplvarid = 1 (1=артикул)
24Таким образом мы получим ÑпиÑок вÑех имеющихÑÑ Ñƒ Ð½Ð°Ñ Ð°Ñ€Ñ‚Ð¸ÐºÑƒÐ»Ð¾Ð² товаров.
25
26ПоÑле надо проверить, еÑть ли у товара Ð¿Ñ€Ð¸ÐºÑ€ÐµÐ¿Ð»ÐµÐ½Ð½Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ°-1, картинка-2 и картинка-3,
27еÑли какой-то нету(или неÑкольких, или вÑех), проверить ÑущеÑтвование файла ÐРТИКУЛ.jpg, ÐРТИКУЛ-1.jpg и ÐРТИКУЛ-2.jpg, ÑоответÑтвенно.
28ЕÑли файл ÑущеÑтвует, добавить в таблицу2 Ñтрочку Ñ Ñтой картинкой
29
30ЕÑли картинка уже прикреплена(Ñтрочка в базе данных еÑть), её менÑть не надо
31ЕÑли картинка не прикреплена - Ñтрочки в базе не будет
32
33Структура базы данных:
34
351) таблица `modx_site_content`
36CREATE TABLE IF NOT EXISTS `modx_site_content` (
37 `id` int(10) unsigned NOT NULL auto_increment,
38 `type` varchar(20) NOT NULL default 'document',
39 `contentType` varchar(50) NOT NULL default 'text/html',
40 `pagetitle` varchar(255) NOT NULL default '',
41 `longtitle` varchar(255) NOT NULL default '',
42 `description` varchar(255) NOT NULL default '',
43 `alias` varchar(255) default '',
44 `link_attributes` varchar(255) NOT NULL default '',
45 `published` tinyint(1) unsigned NOT NULL default '0',
46 `pub_date` int(20) NOT NULL default '0',
47 `unpub_date` int(20) NOT NULL default '0',
48 `parent` int(10) NOT NULL default '0',
49 `isfolder` tinyint(1) unsigned NOT NULL default '0',
50 `introtext` text,
51 `content` mediumtext,
52 `richtext` tinyint(1) unsigned NOT NULL default '1',
53 `template` int(10) NOT NULL default '0',
54 `menuindex` int(10) NOT NULL default '0',
55 `searchable` tinyint(1) unsigned NOT NULL default '1',
56 `cacheable` tinyint(1) unsigned NOT NULL default '1',
57 `createdby` int(10) NOT NULL default '0',
58 `createdon` int(20) NOT NULL default '0',
59 `editedby` int(10) NOT NULL default '0',
60 `editedon` int(20) NOT NULL default '0',
61 `deleted` tinyint(1) unsigned NOT NULL default '0',
62 `deletedon` int(20) NOT NULL default '0',
63 `deletedby` int(10) NOT NULL default '0',
64 `publishedon` int(20) NOT NULL default '0',
65 `publishedby` int(10) NOT NULL default '0',
66 `menutitle` varchar(255) NOT NULL default '',
67 `donthit` tinyint(1) unsigned NOT NULL default '0',
68 `privateweb` tinyint(1) unsigned NOT NULL default '0',
69 `privatemgr` tinyint(1) unsigned NOT NULL default '0',
70 `content_dispo` tinyint(1) NOT NULL default '0',
71 `hidemenu` tinyint(1) unsigned NOT NULL default '0',
72 `class_key` varchar(100) NOT NULL default 'modDocument',
73 `context_key` varchar(100) NOT NULL default 'web',
74 `content_type` int(11) unsigned NOT NULL default '1',
75 `uri` text,
76 `uri_override` tinyint(1) NOT NULL default '0',
77 PRIMARY KEY (`id`),
78 KEY `alias` (`alias`),
79 KEY `published` (`published`),
80 KEY `pub_date` (`pub_date`),
81 KEY `unpub_date` (`unpub_date`),
82 KEY `parent` (`parent`),
83 KEY `isfolder` (`isfolder`),
84 KEY `template` (`template`),
85 KEY `menuindex` (`menuindex`),
86 KEY `searchable` (`searchable`),
87 KEY `cacheable` (`cacheable`),
88 KEY `hidemenu` (`hidemenu`),
89 KEY `class_key` (`class_key`),
90 KEY `context_key` (`context_key`),
91 KEY `uri` (`uri`(1000)),
92 KEY `uri_override` (`uri_override`),
93 FULLTEXT KEY `content_ft_idx` (`pagetitle`,`longtitle`,`description`,`introtext`,`content`)
94) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=73 ;
95
96
97
982) Таблица `modx_site_tmplvar_contentvalues`
99
100CREATE TABLE IF NOT EXISTS `modx_site_tmplvar_contentvalues` (
101 `id` int(10) unsigned NOT NULL auto_increment,
102 `tmplvarid` int(10) NOT NULL default '0',
103 `contentid` int(10) NOT NULL default '0',
104 `value` text NOT NULL,
105 PRIMARY KEY (`id`),
106 KEY `tmplvarid` (`tmplvarid`),
107 KEY `contentid` (`contentid`)
108) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=32 ;