Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

Помогите с ошибкой yandexml.php

30.10.2013, 10:13
Гость
Гость

при запуске файла выдает следующую ошибку:

This page contains the following errors:

error on line 2 at column 1: Extra content at the end of the document
Below is a rendering of the page up to the first error.

Подскажите что можно с этим сделать?
30.10.2013, 11:14
Дмитрий

Зарегистрирован:
2013-09-30
Сообщений: 14

Вот код файла yandexml.php в котором что-то нужно исправить (во второй строке первом столбце), а что именно не понятно. Подскажите если кто в курсе.
Код:
<?

$NETCAT_FOLDER = join( strstr(__FILE__, "/") ? "/" : "\\", array_slice( preg_split("/[\/\\\]+/", __FILE__), 0, -5 ) ).( strstr(__FILE__, "/") ? "/" : "\\" );
include_once ($NETCAT_FOLDER."vars.inc.php");
require_once ($ROOT_FOLDER."connect_io.php");

header("Content-type: text/xml");
$catalogue = $nc_core->catalogue->get_by_host_name($HTTP_HOST);
$catalogue = $catalogue["Catalogue_ID"];
if (!$catalogue) $catalogue = 1;

if (is_file($MODULE_FOLDER."netshop/".MAIN_LANG.".lang.php")) {
require_once($MODULE_FOLDER."netshop/".MAIN_LANG.".lang.php");
$modules_lang = "Russian";
}
else {
require_once($MODULE_FOLDER."netshop/en.lang.php");
$modules_lang = "English";
}

//LoadModuleEnv();
$MODULE_VARS = $nc_core->modules->load_env($modules_lang);

class Netshop_ExportYML extends Netshop {

private $_CurrencyArray;
private $_MaxNameLen;

public function __construct () {
$this->Netshop();
$this->_CurrencyArray = Array( 'RUR', 'RUB', 'USD', 'EUR', 'UAH');
$this->_MaxNameLen = 20;
}

/**
* Экспорт в формате YandexML
* @param int раздел, который надо экспортировать (по умолчанию - весь магазин)
*/
public function ExportYML ($section=0) {
global $HTTP_HOST, $SUB_FOLDER;
global $db, $nc_core;

if (!$this->shop_id) return false;
$shopName = (nc_strlen($this->ShopName) > $this->_MaxNameLen) ? nc_substr($this->ShopName, 0, $this->_MaxNameLen ) : $this->ShopName;
$default_currency = $this->Currencies[$this->DefaultCurrencyID];

header ("Content-type: text/xml");
$ret = "<?xml version=\"1.0\" encoding=\"".$nc_core->NC_CHARSET."\"?>
<!DOCTYPE yml_catalog SYSTEM \"shops.dtd\">
<yml_catalog date=\"".(strftime("%Y-%m-%d %H:%M"))."\">
<shop>
<name>".xmlspecialchars($shopName)."</name>
<company>".xmlspecialchars($this->CompanyName)."</company>
<url>http://".$HTTP_HOST.$SUB_FOLDER."/</url>
<currencies>
<currency id=\"".$default_currency."\" rate=\"1\" />";
foreach ( (array)$this->Currencies as $k => $v ) {
if ( $v != $default_currency && $this->Rates[$k] && in_array($v, $this->_CurrencyArray) ) {
$ret .= "<currency id=\"$v\" rate=\"".$this->Rates[$k]."\" />";
}
}

$ret .= "</currencies>
<categories>\n";

// output categories (shop structure) ---------------------------
if (!$section) $section = $this->shop_id;
$structure = GetStructure($section, "Checked=1");

$all_sections_ids = array(); // потом вытащим на основе этих данных товары

foreach ($structure as $row) {
$ret .= "<category id=\"$row[Subdivision_ID]\"".
($row["Parent_Sub_ID"]==$section ? "":" parentId=\"$row[Parent_Sub_ID]\"").
">".xmlspecialchars($row["Subdivision_Name"])."</category>\n";

$all_sections_id[] = $row["Subdivision_ID"];
}

$ret .= "</categories>\n<offers>";

// GOODS CATALOGUE -----------------------------------------------
$output = array(
"URL"=>"url",
"Price"=>"price",
"CurrencyID"=>"currencyId",
"Subdivision_ID"=>"categoryId",
"Image"=>"picture",
"Name"=>"name",
"Vendor"=>"vendor",
"VendorCode"=>"vendorCode",
"Description"=>"description"
);

// получить типы товаров
$goods_class_ids = $this->GuessGoodsTypeIDs();

// все разделы магазина
$subdivision_id = join(",", $all_sections_id);

foreach ($goods_class_ids as $class_id) {
$query = "SELECT m.*,
ShopCurrency_Name AS CurrencyID,
CONCAT(u.Hidden_URL, s.EnglishName, '_', m.Message_ID, '.html') as URL,
IFNULL(m.$this->PriceColumn, parent.$this->PriceColumn) as Price4User,
IF(m.$this->PriceColumn IS NULL, parent.$this->CurrencyColumn, m.$this->CurrencyColumn) as Currency4User

FROM (`Message".$class_id."` as m, `Subdivision` as u, `Sub_Class` as s)
LEFT JOIN Message".$class_id." as parent
ON (m.`Parent_Message_ID` != 0 AND m.`Parent_Message_ID` = parent.`Message_ID`)
LEFT JOIN `Classificator_ShopCurrency`
ON Classificator_ShopCurrency.`ShopCurrency_ID` = m.`Currency`
WHERE m.`Checked` = 1
AND m.`Subdivision_ID` IN (".$subdivision_id.")
AND s.`Subdivision_ID` = m.`Subdivision_ID`
AND s.`Sub_Class_ID` = m.`Sub_Class_ID`
AND u.`Subdivision_ID` = m.`Subdivision_ID`
HAVING `Price4User` > 0
";

$rows = $db->get_results($query, ARRAY_A);
foreach ( (array)$rows as $row ) {

if (strlen($row["StockUnits"])) {
$row["Available"] = ($row["StockUnits"] ? "true" : "false" );
}
else {
$row["Available"] = "true";
}

// convert to default currency
$row["Price"] = $this->ConvertCurrency($row["Price4User"], $row["Currency4User"]);
// we'll need an absolute url
$row["URL"] = "http://".$HTTP_HOST.$SUB_FOLDER."$row[URL]";

if ($row["Image"]) { // replace to image url
$row["Image"] = "http://" . $HTTP_HOST.$SUB_FOLDER . nc_file_path($class_id, $row["Message_ID"], "Image", "h_");
}

$ret .= "<offer id=\"".sprintf("%d%05d", $class_id, $row["Message_ID"])."\"";
//if ($row['Vendor'] || $row['VendorCode']) $ret .= " type=\"vendor.model\"";
$ret .= " available=\"$row[Available]\"";
$ret .= ">\n";

foreach ($output as $idx=>$tag) {
if ($row[$idx]) {
if ( $tag == 'name' && $row['GroupName'] != '' ) {
$ret .= "<$tag>".xmlspecialchars(strip_tags($row['GroupName']))." - ".xmlspecialchars(strip_tags($row[$idx]))."</$tag>\n";
}
else {
$ret .= "<$tag>".xmlspecialchars(strip_tags($row[$idx]))."</$tag>\n";
}
}
}

$ret .= "</offer>\n";
}
}
// ---------------------------------------------------------------

$ret .= "</offers>\n</shop>\n</yml_catalog>";
print $ret;
// return $ret;
}

} //End Class Netshop_ExportYML


//---------------

$shop = new NetShop_ExportYML();
$shop->ExportYML();

?>
30.10.2013, 12:54
Дмитрий

Зарегистрирован:
2013-09-30
Сообщений: 14

Кто нибудь отзовитесь!!!
31.10.2013, 08:01
Руслан Густокашин
Студия Вэлпис

Зарегистрирован:
2012-02-06
Сообщений: 962

Можете дать ссылку, чтобы я мог посмотреть результат работы этого скрипта, который Вы привели? т.е. полную ссылку на данный php-скрипт.
02.11.2013, 09:36
Дмитрий

Зарегистрирован:
2013-09-30
Сообщений: 14

http://vozduhoved.com/netcat/modules/netshop/export/yandexml.php
02.11.2013, 19:48
Руслан Густокашин
Студия Вэлпис

Зарегистрирован:
2012-02-06
Сообщений: 962

Я посмотрел - там у вас выводится такая ошибка:
Код:
Fatal error:  require_once(): Failed opening required ...........netcat/modules/calendar/en.lang.php'

Такое может быть, если у вас в настройках сайта не указан язык сайта (в соответствующем поле должно быть написано: ru ) - вот система и пытается (безуспешно) английский язык подключить к генератору.
17.11.2013, 21:31
Дмитрий

Зарегистрирован:
2013-09-30
Сообщений: 14

Большой Вам респект, совет как раз в тему, только вот теперь другая проблема нарисовалась, а именно, в страннице которая формируется, выгружается список брендов вместо товаров. Подскажите в чем может быть проблема?
17.11.2013, 21:51
Руслан Густокашин
Студия Вэлпис

Зарегистрирован:
2012-02-06
Сообщений: 962

У вас там не с брендами проблема. Они-то как раз должны выводиться в YML-файл, как и положено.
У вас товары на выгружаются в файл. Они должны быть помимо брендов, а не вместо них. Но вот почему они не выгружаются - гадать, не посмотрев внутрь системы, я не возьмусь, причин может быть целое море.
Например, может быть, вы используете в качестве товарного компонента не стандартный компонент, а какой-то свой собственной разработки и не привели его к стандартам netshop-модуля.
Руслан
27.11.2013, 16:02
Дмитрий

Зарегистрирован:
2013-09-30
Сообщений: 14

Руслан подскажите как можно осуществить осмотр системы и устранение необходимых ошибок? Можно ли сделать осмотр по средствам программы TeamViewer?
29.11.2013, 12:24
Руслан Густокашин
Студия Вэлпис

Зарегистрирован:
2012-02-06
Сообщений: 962

Для народа: проблему все-таки решили, она оказалась в ошибке NetCat 4-й версии. Подсмотрели, как сделано в 5м неткате, поставили в нужное место, и все заработало.
198 196 2013-11-29 12:24:36 13370
Описание проекта