RSS Яндекс.Турбо страницы Webasyst ShopScript
Плагин для формирования RSS-канала товаров в системе Webasyst Shop-Script 7 для сервиса Яндекс.Турбо.
Для создания плагина «RSS с Яндекс.Турбо», для начала создадим несколько папок в которые будет помещать некоторые файлы:
/turborss
—img
—lib
—-actions
——backend
—-cli
—-config
—templates
—-actions
——backend
——setting
Попробуем создать примитивный плагин для выгрузки товаров в наличии или по какому нибудь другому признаку в яндекс турбо страницы.
1. В папке img создадим иконку к плагину с размером 16х16 и назовем ее turborss.png
2. Созданим файл .htaccess в папке lib и templates
1 | Deny from all |
3. Создадим файл shopTurborss.plugin.php в папке lib с классом shopTurborssPlugin
1 2 3 4 5 | <?php class shopTurborssPlugin extends shopPlugin { } |
4. Создадим три файла install.php, plugin.php и requirements.php в папке lib\config
install.php
1 2 3 4 5 | <?php $plugin_id = array('shop', 'turborss'); $app_settings_model = new waAppSettingsModel(); $app_settings_model->set($plugin_id, 'enable', '1'); |
plugin.php
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php return array( 'name' => 'Яндекс Ракета', 'version' => '1.0.0.1', 'vendor' => 'myplugin', 'shop_settings' => true, 'img' => 'img/turborss.png', 'description' => 'TurboRss - Создание xml файла для yandex turborss', 'handlers' => array( 'backend_products' => 'backendProductsEvent', ), ); |
requirements.php
1 2 3 4 5 6 7 8 | <?php return array( 'app.shop'=>array( 'version'=>'5.2.4', 'strict' => true ), ); |
5. Делаем шаблон для плагина.
В папке templates\actions\backend\ создадим файл BackendRun.html
1 | {$message} |
В папке actions\settings\ создадим файл Settings.html
и заменяем в коде Адрес-Вашего-Сайта на ваш реальный адрес сайта
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <div> <section id="main"> {literal} <script type="text/javascript"> $("#main a").click(function() { var self = this; var id = $(self).attr('id'); if (confirm('Внимание в корне сайта, будет создан xml файл!')) { var loading = '""'; $(self).removeClass('green').addClass('yellow'); $(self).after('<img src=' + loading + 'id="load' + id + '"></img>'); var csrf = $('[name=_csrf]').attr("value"); var posting = $.post("?plugin=turborss&action=run", {_csrf: csrf,options: this.id}); posting.done(function(data) { if (data == '{"status":"ok"}') { $('#load' + id).remove(); $(self).removeClass('yellow').addClass('green'); $('.xml').html('Файл создан: <a href="http://Адрес-Вашего-Сайта/turborss.xml" target="_blank">http://Адрес-Вашего-Сайта/turborss.xml</a>'); $(self).after('<i class="icon16 yes ' + id + '"></i>'); setTimeout(function() { $('.icon16.yes.' + id).remove(); }, .3000); } else { $(self).removeClass('yellow').addClass('red'); $('#load.' + id).remove(); } }); } }) </script> {/literal} <h2>Yandex Turbo RSS</h2> <a href="javascript:void(0);" class="button green" id="toxml">Создать xml файл</a><br><br> <p class="xml"> Создает файл turborss.xml для Яндекс Турбо Страниц </p> <section> |
6. Создадим еще два файлика с экшенами и перейдем к главному файлу который будет формировать наш файл rss турбо страниц для яндекса.
в папке lib\actions\ файл shopTurborssPluginSettings.action.php
1 2 3 4 5 6 7 8 9 | <?php class shopTurborssPluginSettingsAction extends waViewAction { public function execute() { } } |
в папке lib\actions\backend\ файл shopTurborssPluginBackendSet.action.php
1 2 3 4 5 6 7 8 9 10 11 12 | <?php class shopTurborssPluginBackendSetAction extends shopBackendProductsAction { public function execute() { } public function getPluginTemplate() { return $this->view->fetch($this->getTemplate()); } |
7. Финальный файл обработки и вывода файла rss.
Создаем в папке lib\actions\backend\ файл с названием shopTurborssPluginBackendRun.action.php
Замените значения в переменных
$shopname = «Название Вашего сайта»;
$company = «Описание сайта»;
$xmltext .= «<yandex:analytics type=\»Yandex\» id=\»ID счетчик яндекса\»></yandex:analytics>\n»;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 | <?php class shopTurborssPluginBackendRunAction extends waViewAction { private function toxml() { $product_model = new shopProductModel(); $sql = 'SELECT sp.id, sp.name, sp.description, sp.price, sp.min_price, sp.max_price, sp.currency, sp.summary, sp.image_filename, sp.ext, sp.url, sp.count, sp.image_id, sp.edit_datetime, sp.status FROM shop_product sp WHERE sp.min_price!=0 AND sp.count!=0 AND sp.status!=0 ORDER BY sp.count DESC LIMIT 0,1000 '; $skus = $product_model->query($sql)->fetchAll(); $ids = array(); if ($skus !== null) { $cfg_url = wa()->getRootUrl(true); $shopname = "Название Вашего сайта"; $company = "Описание сайта"; $xmltext = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; $xmltext .= "<rss xmlns:yandex=\"http://news.yandex.ru\" xmlns:media=\"http://search.yahoo.com/mrss/\" xmlns:turbo=\"http://turbo.yandex.ru\" version=\"2.0\">\n"; $xmltext .= "<channel>\n"; $xmltext .= "<title>$shopname</title>\n"; $xmltext .= "<description>$company</description>\n"; $xmltext .= "<link>$cfg_url</link>\n"; $xmltext .= "<yandex:analytics type=\"Yandex\" id=\"ID счетчик яндекса\"></yandex:analytics>\n"; /* shop_product id name summary meta_title meta_keywords meta_description url description contact_id create_datetime edit_datetime status type_id image_id image_filename video_url sku_id ext rating price compare_price currency min_price max_price tax_id count cross_selling upselling rating_count total_sales category_id badge sku_type base_price_selectable compare_price_selectable purchase_price_selectable sku_count priority */ /* shop_product_images id product_id upload_datetime edit_datetime description sort width height size filename original_filename ext badge_type badge_code */ /* shop_productbrands Полные тексты id name summary description title h1 meta_keywords meta_description seo_description image url filter hidden sort_products enable_sorting params */ $ids = ""; foreach ($skus as $sku) { $url = $sku['url']; $stock = $sku['count']; $price = round($sku['price'], 0); $min_price = round($sku['min_price'], 0); $max_price = round($sku['max_price'], 0); $summary = $sku['summary']; $edit_datetime = $sku['edit_datetime']; $imageurl = $cfg_url.shopImage::getUrl( array( 'id' => $sku['image_id'], 'product_id' => $sku['id'], 'filename' => $sku['image_filename'], 'ext' => $sku['ext'] //расширение изображения (jpg, например) ), '600' ); if ($stock>0) { $available = "true"; } else { $available = "false"; } //$qqqqqqqq = $wa->shop->product($sku['id']; $skuid = $sku['id']; //echo $productf['name']; //$_product = $wa->shop->product($skuid); $xmltext .= "<item turbo=\"true\">\n"; $xmltext.= "<title>".$sku['name']."</title>\n"; $xmltext .= "<link>".$cfg_url."".$url.".html</link>\n"; $xmltext.= "<turbo:content>\n"; $xmltext.= "<![CDATA["; $xmltext.= " <header> <figure> <img src=\"".$imageurl."\"/> </figure> <h1>".$sku['name']."</h1> </header> <p><a href=\"".$cfg_url."".$url.".html\">".$sku['name']."</a></p> <p>".$sku['summary']."</p>"; //$productf = new shopProduct($skuid);работает //$productfsku_id = "".$productf['sku_id']."";работает //$sku_features = $productf->getType();работает //$sku_features = $productf->getData();работает //$xmltext.= "".$productfsku_id.""; /*foreach($sku_features as $brand => $massiv) { $xmltext.= "".$brand." : ".$massiv.""; }*/ $xmltext.= "<p><b>Цены:</b></p><ul> <li>В розницу <b>".$max_price." руб.</b></li> <li>Оптовые цены <b>".$min_price." руб.</b></li> </ul>"; $xmltext.= "<p><b>В наличии</b> на складе. Самовывоз. Доставка.</p>"; $xmltext.= "]]>\n"; $xmltext.= "</turbo:content>\n"; $xmltext.= "<author>$shopname</author>\n"; //$xmltext.= "<category>".htmlspecialchars($this->items[$i]->category)."</category>\n"; $xmltext.= "<pubDate>".$edit_datetime."</pubDate>\n"; /* if ($min_price>0){ $xmltext .= "<price>".round($price, 0)."</price>\n"; }else{ $xmltext .= "<price>".round($price, 0)."</price>\n"; }*/ /*$xmltext .= "<currencyId>RUB</currencyId>\n"; $xmltext .= "<categoryId></categoryId>\n"; $xmltext .= "<picture>$imageurl</picture>\n"; $xmltext .= "<name>".$sku['name']."</name>\n"; $xmltext .= "<pickup>true</pickup>\n"; $xmltext .= "<store>true</store>\n"; $xmltext .= "<delivery>true</delivery>\n"; $xmltext .= "<local_delivery_cost>"; $xmltext .= "800"; $xmltext .= "</local_delivery_cost>\n"; $xmltext .= "<vendor></vendor>"; $xmltext .= "<sales_notes></sales_notes>\n"; if ($min_price>0){ $xmltext .= "<description>Оптовые цены. Цена в розницу: ".round($max_price, 0)."р. ".htmlspecialchars(strip_tags($summary))."</description>\n"; }else{ $xmltext .= "<description>Цена в розницу. ".htmlspecialchars(strip_tags($summary))."</description>\n"; }*/ $xmltext .= ""; if($stock>0){ }else{ } $xmltext .= "</item>\n"; } $xmltext .= "</channel>\n"; $xmltext .= "</rss>\n"; } $xml = $xmltext; $xml_file = fopen('turborss.xml', 'w+'); if (!$xml_file) { echo 'Ошибка открытия файла'; } else { ftruncate($xml_file, 0); fputs($xml_file, $xml); } } public function execute() { $message = ''; $request = waRequest::post(); if ($request['options'] == 'toxml') { $this->toxml(); } $this->view->assign('message', empty($message) ? '{"status":"ok"}' : $message); } } |
Пример выгружаемого файла для турбо-страниц:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <rss xmlns:yandex="http://news.yandex.ru" xmlns:media="http://search.yahoo.com/mrss/" xmlns:turbo="http://turbo.yandex.ru" version="2.0"> <channel> <title>Название вашего сайта</title> <description> Описание сайта </description> <link>https://Адрес-Вашего-Сайта/</link> <yandex:analytics type="Yandex" id="ID счетчик яндекса"/> <item turbo="true"> <title>Название товара</title> <link> https://Адрес-Вашего-Сайта/url-tovar.html </link> <turbo:content> <![CDATA[ <header> <figure> <img src="https://Адрес-Вашего-Сайта/picture.jpg"/> </figure> <h1>Название товара</h1> </header> <p><a href="ссылка на товар">Название товара купить?</a></p> <p>Описание товара</p><p><b>Цены:</b></p><ul> <li>В розницу <b>200 руб.</b></li> <li>Оптовые цены <b>150 руб.</b></li> </ul><p><b>В наличии</b> на складе. Самовывоз. Доставка.</p> ]]> </turbo:content> <author>Название вашего сайта</author> <pubDate>2018-01-01 01:01:01</pubDate> </item> </channel> </rss> |
После того как файл создан и отредактирован под свои нужны, нужно зайти Яндекс.Вебмастер и в разделе Турбо-страницы (Источники) добавить ссылку на этот файлик. Также после этого еще нужно зайти в настройки и внести некоторые данные о вашем сайте.
А можно файл с плагином rss для shop scrit в студию? чтобы скачать!
А как сделать чтоб он автоматически создавался ?
Класс бесплатно и все работает!