Files
ave-cms/system/App/Frontend/Feeds/FeedPresets.php
T
2026-07-27 12:58:44 +03:00

123 lines
6.9 KiB
PHP

<?php
/*
|--------------------------------------------------------------------------------------
| AVE.cms
|--------------------------------------------------------------------------------------
| @package AVE.cms
| @file system/App/Frontend/Feeds/FeedPresets.php
| @author AVE.cms <support@ave-cms.ru>
| @copyright 2007-2026 (c) AVE.cms
| @link https://ave-cms.ru
| @version 3.3
*/
namespace App\Frontend\Feeds;
defined('BASEPATH') || die('Direct access to this location is not allowed.');
use App\Content\CatalogTables;
use DB;
class FeedPresets
{
protected static $seeded = false;
public static function seed()
{
if (self::$seeded) { return; }
self::$seeded = true;
foreach (self::definitions() as $definition) { self::create($definition[0], $definition[1], $definition[2], isset($definition[3]) ? $definition[3] : 'yml_catalog'); }
}
public static function ensureCategory($categoryId)
{
$categoryId = (int) $categoryId;
if ($categoryId < 1 || !self::categoryExists($categoryId)) { return null; }
$alias = 'legacy-category-' . $categoryId;
self::create($alias, 'Legacy: категория ' . $categoryId, array($categoryId));
return $alias;
}
public static function aliasForPath($path)
{
$path = ltrim((string) $path, '/'); $paths = self::paths();
return isset($paths[$path]) ? $paths[$path] : null;
}
public static function paths()
{
return array(
'export.xml'=>'legacy-catalog-all','offers.xml'=>'legacy-offers-all','yandex_2025.xml'=>'legacy-yandex-2025',
'sbermega_2025.xml'=>'legacy-sbermega-2025','sbermegaall_2025.xml'=>'legacy-sbermegaall-2025',
'yml/yml_homebeds.xml'=>'legacy-offers-all','yml/yml_wcbeds_2025.xml'=>'legacy-wcbeds-65',
'yml/yml_homebeds_2025.xml'=>'legacy-homebeds-66','yml/yml_kidsbeds_2025.xml'=>'legacy-kidsbeds-67',
'yml/yml_medbeds_2025.xml'=>'legacy-medbeds-64','yml/yml_reanimation_2025.xml'=>'legacy-reanimation-69',
'yml/yml_birth_2025.xml'=>'legacy-birth-68','yml/yml_beds.xml'=>'legacy-beds-97',
'yml/massazhnye-stoly-skladnye.yml'=>'legacy-category-12','yml/massazhnye-stoly-stacionarnye.yml'=>'legacy-category-93',
'yml/massazhnye-stoly-s-elektroprivodom.yml'=>'legacy-category-92','yml/massazhnoe-oborudovanie.yml'=>'legacy-massage',
'yml/kosmetologicheskie-kresla.yml'=>'legacy-cosmetology','yml/kosmetologicheskie.yml'=>'legacy-category-87',
'yml/pedikyurnye.yml'=>'legacy-category-88','yml/krovati-obcshebolnichnye.yml'=>'legacy-medbeds-64',
'yml/krovati-s-tualetnym-ustrojstvom.yml'=>'legacy-wcbeds-65','yml/krovati-dlya-domashnego-ispolzovaniya.yml'=>'legacy-homebeds-66',
'yml/detskie-medicinskie-krovati.yml'=>'legacy-kidsbeds-67','yml/reanimacionnye-krovati.yml'=>'legacy-reanimation-69',
'yml/medicinskie-krovati-mehanicheskie.yml'=>'legacy-category-95','yml/medicinskie-krovati-s-elektroprivodom.yml'=>'legacy-category-96',
'yml/medicinskie-krovati.yml'=>'legacy-medical-beds','yml/krovati-medicinskie.yml'=>'legacy-medical-beds',
'yml/stoliki-reanimacionnye-anesteziologicheskie.yml'=>'legacy-category-47'
);
}
protected static function definitions()
{
return array(
array('legacy-catalog-all','Legacy: весь каталог',array()),
array('legacy-offers-all','Legacy: цены и предложения',array(),'yml_offers'),
array('legacy-yandex-2025','Legacy: Яндекс 2025',array()),
array('legacy-sbermega-2025','Legacy: СберМега 2025',array()),
array('legacy-sbermegaall-2025','Legacy: СберМега, весь каталог 2025',array()),
array('legacy-beds-97','Legacy: медицинские кровати',array(97)),
array('legacy-medbeds-64','Legacy: медицинские кровати, категория 64',array(64)),
array('legacy-wcbeds-65','Legacy: кровати с туалетом',array(65)),
array('legacy-homebeds-66','Legacy: домашние кровати',array(66)),
array('legacy-kidsbeds-67','Legacy: детские кровати',array(67)),
array('legacy-birth-68','Legacy: родовые кровати',array(68)),
array('legacy-reanimation-69','Legacy: реанимационные кровати',array(69)),
array('legacy-medical-beds','Legacy: все медицинские кровати',array(1,67,68,69,95,96)),
array('legacy-cosmetology','Legacy: косметология',array(87,88)),
array('legacy-massage','Legacy: массаж',array(99,12,92)),
array('legacy-category-47','Legacy: категория 47',array(47)),
array('legacy-category-12','Legacy: категория 12',array(12)),
array('legacy-category-65','Legacy: категория 65',array(65)),
array('legacy-category-87','Legacy: категория 87',array(87)),
array('legacy-category-88','Legacy: категория 88',array(88)),
array('legacy-category-92','Legacy: категория 92',array(92)),
array('legacy-category-93','Legacy: категория 93',array(93)),
array('legacy-category-95','Legacy: категория 95',array(95)),
array('legacy-category-96','Legacy: категория 96',array(96))
);
}
protected static function create($alias, $name, array $categories, $profile = 'yml_catalog')
{
if (DB::query('SELECT id FROM ' . Schema::table('definitions') . ' WHERE alias=%s LIMIT 1', $alias)->getValue()) { return; }
$host = defined('HOST') && HOST ? rtrim(HOST, '/') : 'https://med-mos.ru';
$mapping = array('name'=>'index:title','url'=>'document:url','price'=>'index:price','oldprice'=>'index:old_price','vendorCode'=>'index:article','vendor'=>'static:Мед-Мос','description'=>'field:17','pictures'=>'index:images');
$catalogFieldId=(int)DB::query("SELECT field_id FROM ".CatalogTables::table('module_catalog_settings')." WHERE rubric_id=6 AND purpose='commerce' ORDER BY id LIMIT 1")->getValue();
$now = time();
DB::Insert(Schema::table('definitions'), array(
'name'=>$name,'alias'=>$alias,'status'=>1,'profile'=>$profile,'rubric_id'=>6,'catalog_field_id'=>$catalogFieldId,'site_name'=>'Мед-Мос',
'company_name'=>'Мед-Мос','base_url'=>$host,'currency'=>'RUB','category_mode'=>'tree','include_descendants'=>0,
'min_price'=>0,'cache_ttl'=>3600,'access_token'=>'','mappings_json'=>json_encode($mapping, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
'params_json'=>'[]','conditions_json'=>'[]','created_at'=>$now,'updated_at'=>$now
));
$feedId = (int) DB::insertId();
foreach (array_unique(array_map('intval', $categories)) as $categoryId) {
if ($categoryId > 0 && self::categoryExists($categoryId)) { DB::Insert(Schema::table('categories'), array('feed_id'=>$feedId,'catalog_item_id'=>$categoryId,'mode'=>'include')); }
}
}
protected static function categoryExists($categoryId)
{
return (bool) DB::query('SELECT id FROM ' . CatalogTables::table('module_catalog_items') . ' WHERE id=%i LIMIT 1', (int) $categoryId)->getValue();
}
}