Импорт атрибутов Magento php выдает внутреннюю ошибку сервера

Я искал расширение или php некоторого вида, чтобы экспортировать и импортировать мои атрибуты. Это связано с тем, что сайт переходит на другой сервер. У меня много атрибутов, и я не хочу делать это вручную.

Я видел этот пост и использовал код:
Источник: https://magento.stackexchange.com/questions/11520/how-to-export-and-import-all-attributes-and-attribute-sets-from-one-magento-to-o <- кредиты этому парню!

Атрибуты экспорта кода:

<?php
define('MAGENTO', realpath(dirname(__FILE__)));
require_once MAGENTO . '/app/Mage.php';
Mage::app();
$entity_type_id = Mage::getModel('catalog/product')->getResource()->getTypeId();

prepareCollection($entity_type_id);

function prepareCollection($ent_type_id){
$resource = Mage::getSingleton('core/resource');
$connection = $resource->getConnection('core_read');
$select_attribs = $connection->select()
->from(array('ea'=>$resource->getTableName('eav/attribute')))
->join(array('c_ea'=>$resource->getTableName('catalog/eav_attribute')), 'ea.attribute_id = c_ea.attribute_id');
// ->join(array('e_ao'=>$resource->getTableName('eav/attribute_option'), array('option_id')), 'c_ea.attribute_id = e_ao.attribute_id')
// ->join(array('e_aov'=>$resource->getTableName('eav/attribute_option_value'), array('value')), 'e_ao.option_id = e_aov.option_id and store_id = 0')
$select_prod_attribs = $select_attribs->where('ea.entity_type_id = '.$ent_type_id)
->order('ea.attribute_id ASC');

$product_attributes = $connection->fetchAll($select_prod_attribs);

$select_attrib_option = $select_attribs
->join(array('e_ao'=>$resource->getTableName('eav/attribute_option'), array('option_id')), 'c_ea.attribute_id = e_ao.attribute_id')
->join(array('e_aov'=>$resource->getTableName('eav/attribute_option_value'), array('value')), 'e_ao.option_id = e_aov.option_id and store_id = 0')
->order('e_ao.attribute_id ASC');

$product_attribute_options = $connection->fetchAll($select_attrib_option);

$attributesCollection = mergeCollections($product_attributes, $product_attribute_options);
prepareCsv($attributesCollection);

}

function mergeCollections($product_attributes, $product_attribute_options){

foreach($product_attributes as $key => $_prodAttrib){
$values = array();
$attribId = $_prodAttrib['attribute_id'];
foreach($product_attribute_options as $pao){
if($pao['attribute_id'] == $attribId){
$values[] = $pao['value'];
}
}
if(count($values) > 0){
$values = implode(";", $values);
$product_attributes[$key]['_options'] = $values;
}
else{
$product_attributes[$key]['_options'] = "";
}
/*
temp
*/
$product_attributes[$key]['attribute_code'] = $product_attributes[$key]['attribute_code'];
}

return $product_attributes;

}

function prepareCsv($attributesCollection, $filename = "importAttrib.csv", $delimiter = '|', $enclosure = '"'){

$f = fopen('php://memory', 'w');
$first = true;
foreach ($attributesCollection as $line) {
if($first){
$titles = array();
foreach($line as $field => $val){
$titles[] = $field;
}
fputcsv($f, $titles, $delimiter, $enclosure);
$first = false;
}
fputcsv($f, $line, $delimiter, $enclosure);
}
fseek($f, 0);
header('Content-Type: application/csv');
header('Content-Disposition: attachement; filename="'.$filename.'"');
fpassthru($f);
}

Атрибуты импорта кода:

<?php
define('MAGENTO', realpath(dirname(__FILE__)));
require_once MAGENTO . '/../app/Mage.php';
Mage::app();
// $fileName = MAGENTO . '/var/import/importAttrib.csv';
$fileName = 'importAttrib.csv';
// getCsv($fileName);
getAttributeCsv($fileName);

function getAttributeCsv($fileName){
// $csv = array_map("str_getcsv", file($fileName,FILE_SKIP_EMPTY_LINES));
$file = fopen($fileName,"r");
while(!feof($file)){
$csv[] = fgetcsv($file, 0, '|');
}
$keys = array_shift($csv);
foreach ($csv as $i=>$row) {
$csv[$i] = array_combine($keys, $row);
}
foreach($csv as $row){
$labelText = $row['frontend_label'];
$attributeCode = $row['attribute_code'];
if($row['_options'] != "")
$options = explode(";", $row['_options']); // add this to createAttribute parameters and call "addAttributeValue" function.
else
$options = -1;
if($row['apply_to'] != "")
$productTypes = explode(",", $row['apply_to']);
else
$productTypes = -1;
unset($row['frontend_label'], $row['attribute_code'], $row['_options'], $row['apply_to'], $row['attribute_id'], $row['entity_type_id'], $row['search_weight']);
createAttribute($labelText, $attributeCode, $row, $productTypes, -1, $options);
}
}/**
* Create an attribute.
*
* For reference, see Mage_Adminhtml_Catalog_Product_AttributeController::saveAction().
*
* @return int|false
*/
function createAttribute($labelText, $attributeCode, $values = -1, $productTypes = -1, $setInfo = -1, $options = -1)
{

$labelText = trim($labelText);
$attributeCode = trim($attributeCode);

if($labelText == '' || $attributeCode == '')
{
echo "Can't import the attribute with an empty label or code.  LABEL= [$labelText]  CODE= [$attributeCode]"."<br/>";
return false;
}

if($values === -1)
$values = array();

if($productTypes === -1)
$productTypes = array();

if($setInfo !== -1 && (isset($setInfo['SetID']) == false || isset($setInfo['GroupID']) == false))
{
echo "Please provide both the set-ID and the group-ID of the attribute-set if you'd like to subscribe to one."."<br/>";
return false;
}

echo "Creating attribute [$labelText] with code [$attributeCode]."."<br/>";

//>>>> Build the data structure that will define the attribute. See
//     Mage_Adminhtml_Catalog_Product_AttributeController::saveAction().

$data = array(
'is_global'                     => '0',
'frontend_input'                => 'text',
'default_value_text'            => '',
'default_value_yesno'           => '0',
'default_value_date'            => '',
'default_value_textarea'        => '',
'is_unique'                     => '0',
'is_required'                   => '0',
'frontend_class'                => '',
'is_searchable'                 => '1',
'is_visible_in_advanced_search' => '1',
'is_comparable'                 => '1',
'is_used_for_promo_rules'       => '0',
'is_html_allowed_on_front'      => '1',
'is_visible_on_front'           => '0',
'used_in_product_listing'       => '0',
'used_for_sort_by'              => '0',
'is_configurable'               => '0',
'is_filterable'                 => '0',
'is_filterable_in_search'       => '0',
'backend_type'                  => 'varchar',
'default_value'                 => '',
'is_user_defined'               => '0',
'is_visible'                    => '1',
'is_used_for_price_rules'       => '0',
'position'                      => '0',
'is_wysiwyg_enabled'            => '0',
'backend_model'                 => '',
'attribute_model'               => '',
'backend_table'                 => '',
'frontend_model'                => '',
'source_model'                  => '',
'note'                          => '',
'frontend_input_renderer'       => '',
);

// Now, overlay the incoming values on to the defaults.
foreach($values as $key => $newValue)
if(isset($data[$key]) == false)
{
echo "Attribute feature [$key] is not valid."."<br/>";
return false;
}

else
$data[$key] = $newValue;

// Valid product types: simple, grouped, configurable, virtual, bundle, downloadable, giftcard
$data['apply_to']       = $productTypes;
$data['attribute_code'] = $attributeCode;
$data['frontend_label'] = array(
0 => $labelText,
1 => '',
3 => '',
2 => '',
4 => '',
);

//<<<<

//>>>> Build the model.

$model = Mage::getModel('catalog/resource_eav_attribute');

$model->addData($data);

if($setInfo !== -1)
{
$model->setAttributeSetId($setInfo['SetID']);
$model->setAttributeGroupId($setInfo['GroupID']);
}

$entityTypeID = Mage::getModel('eav/entity')->setType('catalog_product')->getTypeId();
$model->setEntityTypeId($entityTypeID);

$model->setIsUserDefined(1);

//<<<<

// Save.

try
{
$model->save();
}
catch(Exception $ex)
{
echo "Attribute [$labelText] could not be saved: " . $ex->getMessage()."<br/>";
return false;
}

if(is_array($options)){
foreach($options as $_opt){
addAttributeValue($attributeCode, $_opt);
}
}

$id = $model->getId();

echo "Attribute [$labelText] has been saved as ID ($id).<br/>";

// return $id;
}

function addAttributeValue($arg_attribute, $arg_value)
{
$attribute_model        = Mage::getModel('eav/entity_attribute');

$attribute_code         = $attribute_model->getIdByCode('catalog_product', $arg_attribute);
$attribute              = $attribute_model->load($attribute_code);

if(!attributeValueExists($arg_attribute, $arg_value))
{
$value['option'] = array($arg_value,$arg_value);
$result = array('value' => $value);
$attribute->setData('option',$result);
$attribute->save();
}

$attribute_options_model= Mage::getModel('eav/entity_attribute_source_table') ;
$attribute_table        = $attribute_options_model->setAttribute($attribute);
$options                = $attribute_options_model->getAllOptions(false);

foreach($options as $option)
{
if ($option['label'] == $arg_value)
{
return $option['value'];
}
}
return false;
}
function attributeValueExists($arg_attribute, $arg_value)
{
$attribute_model        = Mage::getModel('eav/entity_attribute');
$attribute_options_model= Mage::getModel('eav/entity_attribute_source_table') ;

$attribute_code         = $attribute_model->getIdByCode('catalog_product', $arg_attribute);
$attribute              = $attribute_model->load($attribute_code);

$attribute_table        = $attribute_options_model->setAttribute($attribute);
$options                = $attribute_options_model->getAllOptions(false);

foreach($options as $option)
{
if ($option['label'] == $arg_value)
{
return $option['value'];
}
}

return false;
}

Код импорта не работает. Возвращает 500 Внутренняя ошибка сервера. Что-то я пропускаю в коде импорта? А если нет, у вас есть предложение для меня?

Если вам нужна дополнительная информация, не стесняйтесь спрашивать.

Заранее спасибо!

1

Решение

Как долго длится 500?

Если ваш PHP работает под управлением CGI, а ActivityTimeout ниже max_execution_time (например, вы устанавливаете max_execution_time на 1200 с помощью ini_set или htaccess, а CGIs activityTimeout по умолчанию составляет всего 40), он выдаст 500 вместо ошибки PHP. Это всегда действует так, если настройки CGI ниже, чем настройки PHP (память, максимальные запросы, время ожидания и т. Д.)

Реальная неверная конфигурация 500 (например, php.ini или .htaccess) может появиться как раз вовремя при запуске, а не только когда ваш скрипт запускается / запускается.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]