Вы не авторизованы.
<?php require_once(DIR_FUNC.'/export_products_function.php'); class YandexMarket extends Module { const YANDEX_FILE = "/yandex.xml"; function initInterfaces(){ $this->Interfaces = array( 'export_page' => array( 'name' => 'Страница экспорта продуктов в Yandex.Маркет', 'method' => 'methodExport', ), 'xml_file_access' => array( 'name' => 'Доступ к файлу Yandex.Маркет', 'method' => 'methodXMLFileAccess', ), ); } function methodXMLFileAccess(){ //доступ к файлу для Яндекс.Маркет $fileToDownLoad = DIR_TEMP.YandexMarket::YANDEX_FILE; if (file_exists( $fileToDownLoad )){ if (isset($_GET["download"])){ header('Content-type: application/force-download'); header('Content-Transfer-Encoding: Binary'); header('Content-length: '.filesize($fileToDownLoad)); header('Content-disposition: attachment; filename='.basename($fileToDownLoad) ); readfile($fileToDownLoad); }else{ echo implode( "", file( $fileToDownLoad ) ); } exit(1); }else{ if(function_exists('error404page'))error404page(); } } function _exportToYandexMarket( $f, $rate, $export_product_name ) { $spArray = array( 'exprtUNIC'=>array( 'mode' =>'toarrays', 'expProducts' =>array() ) ); $exportCategories = array(array(),array()); export_exportSubcategories(0, $exportCategories, $spArray); $this->_exportBegin( $f ); $this->_exportAllCategories( $f, $spArray['exprtUNIC']['expProducts'] ); $this->_exportProducts( $f, $rate, $export_product_name, $spArray['exprtUNIC']['expProducts'] ); $this->_exportEnd( $f ); } function _deleteHTML_Elements( $str ) { $str = strip_tags($str); $str = str_replace(' ', ' ', $str); $str = str_replace( "<", "<", $str ); $str = str_replace( ">", ">", $str ); $str = str_replace( "&", "&", $str ); $str = str_replace( "\"", """, $str ); $str = str_replace( "'", "'", $str ); $str = str_replace( "\r", "", $str ); return $str; } function _exportBegin( $f ) { fputs( $f, "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\n" ); fputs( $f, " <!DOCTYPE yml_catalog SYSTEM \"shops.dtd\">\n" ); fputs( $f, " <yml_catalog date=\"".date("Y-m-d H:i")."\">\n" ); fputs( $f, " <shop>\n" ); fputs( $f, " <name>".$this->_deleteHTML_Elements(CONF_SHOP_NAME)."</name>\n"); fputs( $f, " <company>".$this->_deleteHTML_Elements(CONF_SHOP_NAME)."</company>\n"); fputs( $f, " <url>".$this->getStoreUrl()."</url>\n"); fputs( $f, " <currencies>\n"); fputs( $f, " <currency id=\"RUR\" rate=\"1\"/>\n"); fputs( $f, " <currency id=\"USD\" rate=\"CBRF\"/>\n"); fputs( $f, " <currency id=\"EUR\" rate=\"CBRF\"/>\n"); fputs( $f, " <currency id=\"UAH\" rate=\"CBRF\"/>\n"); fputs( $f, " </currencies>\n"); } function _exportAllCategories( $f, &$_ProductIDs ) { if(!count($_ProductIDs))return 0; $Cats = array(); $execCats = array(); $sql = " SELECT catt.categoryID, ".LanguagesManager::sql_prepareField('catt.name')." AS name, catt.parent, catt.slug FROM ".CATEGORIES_TABLE." as catt LEFT JOIN ".PRODUCTS_TABLE." as prot ON catt.categoryID=prot.categoryID WHERE prot.productID IN (".implode(", ", $_ProductIDs).") GROUP BY prot.categoryID "; $q = db_query($sql); fputs($f," <categories>\n"); while ($row = db_fetch_row($q)) { if(!in_array($row[0], $execCats)){ $execCats[] = $row[0]; } if(!in_array($row[2], $Cats) && $row[2]>1){ $Cats[] = $row[2]; } $row[1] = $this->_deleteHTML_Elements( $row[1] ); if ($row[2] <= 1) { fputs($f," <category id=\"".$row[0]."\">".$row[1]. "</category>\n"); } else { fputs($f," <category id=\"".$row[0]."\" parentId=\"".$row[2]."\">".$row[1]."</category>\n"); } } while (count($Cats)) { $sql = " SELECT categoryID, ".LanguagesManager::sql_prepareField('name')." AS name, parent FROM ".CATEGORIES_TABLE." WHERE categoryID IN (".implode(", ", $Cats).") "; $q = db_query($sql); $Cats = array(); while ($row = db_fetch_row($q)) { $Disp = false; if(!in_array($row[0], $execCats)){ $execCats[] = $row[0]; $Disp = true; } if( !in_array($row[2], $execCats) && !in_array($row[2], $Cats) && $row[2]>1){ $Cats[] = $row[2]; } $row[1] = $this->_deleteHTML_Elements( $row[1] ); if ($row[2] <= 1 && $Disp) { fputs($f," <category id=\"".$row[0]."\">".$row[1]. "</category>\n"); } elseif($Disp) { fputs($f," <category id=\"".$row[0]."\" parentId=\"".$row[2]."\">".$row[1]."</category>\n"); } } } fputs($f," </categories>\n"); } function _exportProducts( $f, $rate, $export_product_name, &$_ProductIDs ) { fputs( $f, " <offers>\n"); //товары с нулевым остатком на складе if (isset($_POST["yandex_dont_export_negative_stock"])) $clause = " and in_stock"; else $clause = ""; //какое описание экспортировать if ($_POST["yandex_export_description"] == 1) { $dsc = "description"; $dsc_q = ", ".LanguagesManager::sql_prepareField($dsc)." as ".$dsc; } else if ($_POST["yandex_export_description"] == 2) { $dsc = "brief_description"; $dsc_q = ", ".LanguagesManager::sql_prepareField($dsc)." as ".$dsc; } else { $dsc = ""; $dsc_q = ""; } //выбрать товары $proCount = count($_ProductIDs); $iter = 0; for (; $iter<$proCount;$iter+=100){ $sql = "select productID, ".LanguagesManager::sql_prepareField('name')." AS name, Price, categoryID, default_picture".$dsc_q.", in_stock, slug from ".PRODUCTS_TABLE." where ".(count($_ProductIDs)?"productID IN(".implode(", ", array_slice($_ProductIDs, $iter, 100)).") AND ":"")."enabled=1".$clause; $q = db_query($sql); $store_url = $this->getStoreUrl(); //$picture_url = (MOD_REWRITE_SUPPORT&&false)?$store_url.'products_pictures/':BASE_URL.URL_PRODUCTS_PICTURES.'/'; $picture_url = (SystemSettings::is_hosted())?$store_url.'products_pictures/':BASE_URL.URL_PRODUCTS_PICTURES.'/'; while ($product = db_fetch_row($q)) { fputs( $f, " <offer available=\"".(($product['in_stock'] || !CONF_CHECKSTOCK)?'true':'false')."\" id=\"".$product["productID"]."\">\n"); fputs( $f, " <url>".str_replace('&','&',set_query('ukey=product&furl_enable=1&product_slug='.$product['slug'].'&productID='.$product['productID'].'&from=ya',$store_url))."</url>\n" ); fputs( $f, " <price>".RoundFloatValueStr($product["Price"]*$rate)."</price>\n" ); fputs( $f, " <currencyId>RUR</currencyId>\n" ); fputs( $f, " <categoryId>".$product["categoryID"]."</categoryId>\n" ); if ($product["default_picture"] != NULL) { $pic_clause = " and photoID=".((int)$product["default_picture"]); } else $pic_clause = ""; $q1 = db_query("select filename, thumbnail from ".PRODUCT_PICTURES." where productID=".$product["productID"] . $pic_clause.' ORDER BY priority');//.' ORDER BY priority'); $pic_row = db_fetch_row($q1); if($pic_row){ if ( strlen($pic_row["filename"]) && file_exists(DIR_PRODUCTS_PICTURES."/".$pic_row["filename"]) ) fputs( $f, " <picture>".$picture_url.str_replace(' ', '%20',$this->_deleteHTML_Elements($pic_row["filename"]))."</picture>\n" ); else if ( strlen($pic_row["thumbnail"]) && file_exists(DIR_PRODUCTS_PICTURES."/".$pic_row["thumbnail"]) ) fputs( $f, " <picture>".$picture_url.str_replace(' ', '%20',$this->_deleteHTML_Elements($pic_row["thumbnail"]))."</picture>\n" ); } switch ($export_product_name){ default: case 'only_name': $_NameAddi = ''; break; case 'path_and_name': $_NameAddi = ''; $_t = catCalculatePathToCategory( $product['categoryID'] ); foreach ($_t as $__t) if($__t['categoryID']!=1) $_NameAddi .= $__t['name'].':'; break; } $product["name"] = $this->_deleteHTML_Elements( $_NameAddi.$product["name"] ); fputs( $f, " <name>".$product["name"]."</name>\n" ); if ( strlen($dsc)>0 ) { $product[$dsc] = $this->_deleteHTML_Elements( $product[$dsc] ); fputs( $f, " <description>".$product[ $dsc ]."</description>\n" ); } else { fputs( $f, " <description></description>\n" ); } fputs( $f, " </offer>\n"); } } fputs( $f, " </offers>\n"); } function _exportEnd( $f ) { fputs( $f, " </shop>\n" ); fputs( $f, " </yml_catalog>\n" ); } function methodExport(){ global $smarty; //show successful save confirmation message if (file_exists(DIR_TEMP.YandexMarket::YANDEX_FILE)){ $file_info = array( 'size'=>(string) round( filesize(DIR_TEMP.YandexMarket::YANDEX_FILE) / 1024 ), 'mtime'=>Time::standartTime(filemtime(DIR_TEMP.YandexMarket::YANDEX_FILE)), ); $smarty->assign("yandex_file", $file_info); if (isset($_GET["yandex_export_successful"])) { set_query('yandex_export_successful=yes','',true); $smarty->assign("yandex_export_successful", 1); } } if (!isset($_POST["yandex_export"]))$_POST["yandex_export"] = ''; if ($_POST["yandex_export"]) //save payment gateways_settings { $rurrate = (float)$_POST["yandex_rur_rate"]; $yandex_export_product_name = isset($_POST['yandex_export_product_name'])?$_POST['yandex_export_product_name']:'only_name'; if ($rurrate <= 0) { $smarty->assign( "yandex_errormsg", "Курс рубля указан неверно. Пожалуйста, вводите положительное число" ); }else{//экспортировать товары $f = @fopen(DIR_TEMP.YandexMarket::YANDEX_FILE,"wb"); if ($f) { $this->_exportToYandexMarket( $f, $rurrate, $yandex_export_product_name ); fclose($f); iconv_file('utf-8','cp1251',DIR_TEMP.YandexMarket::YANDEX_FILE,true); RedirectSQ('yandex_export_successful=yes'); }else{ $smarty->assign( "yandex_errormsg", "Ошибка при создании файла ".YandexMarket::YANDEX_FILE); } } } require(DIR_ROOT.'/includes/modules.export_products.php'); $smarty->assign("admin_sub_dpt", "modules_yandex.tpl.html"); } private function getStoreUrl() { static $store_url = null; if(!is_null($store_url)){ return $store_url; } $store_url = correct_URL(isset($_POST['base_url'])?$_POST['base_url']:CONF_FULL_SHOP_URL); return $store_url; } } ?>
Нужно что-бы если товара на складе >500, то true, а если <500 false:
fputs( $f, " <offer available=\"".(($product['in_stock'] || !CONF_CHECKSTOCK)?'true':'false')."\" id=\"".$product["productID"]."\">\n");
Заранее спасибо
Неактивен
(($product['in_stock'] || !CONF_CHECKSTOCK)?'true':'false')
заменить на
(($product['in_stock'] > 500)?'true':'false')
Вроде так
Неактивен
$sql = "select productID, ".LanguagesManager::sql_prepareField('name')." AS name, Price, categoryID, default_picture".$dsc_q.", in_stock, slug from ".PRODUCTS_TABLE." where ".(count($_ProductIDs)?"productID IN(".implode(", ", array_slice($_ProductIDs, $iter, 100)).") AND ":"")."enabled=1 and Price>500 ".$clause;
Неактивен
Нам ведь нужно получить значение available true или false
Неактивен
asidun написал:
Нам ведь нужно получить значение available true или false
затупил малость)) вы правы)
Неактивен
Но давайте и о вашем решении пару слов скажем, так как оно намного лучше моего в том случае, если нужно выбрать для экспорта только тот товар которого на складе больше 500.
Может кому-то пригодится.
Неактивен
как это же реализовать с учетом категорий? для одной родительской категории одно значение для второй втрое. Заранее спасибо
Неактивен