magento - тип пользовательского атрибута, загрузка файла

Не уверен, с чего начать в этом и какое решение было бы лучшим. Мне нужно иметь атрибут продукта, который поддерживает загрузку файлов, для цели изображения.

Я не ищу код, просто несколько советов о том, как лучше всего это сделать.


person David    schedule 11.02.2011    source источник


Ответы (4)



создайте новый атрибут и сохраните там путь к файлу, а в графическом интерфейсе предложите поле загрузки файла для этого

person Anton S    schedule 12.02.2011
comment
Я изо всех сил пытался найти эту строку из 20 слов за последние три часа :). - person Hassan Ali Shahzad; 03.03.2016

если вы хотите добавить загрузку файла для клиента/продукта. просто создайте для этого связанный атрибут, и в админке вы найдете опцию и будете работать правильно, а для внешнего интерфейса просто создайте ввод файла. загрузите его через загрузчик файлов magento в любой каталог и просто сохраните путь к файлу в атрибуте. Мой код для атрибута файла клиента для справки:

<label for="certificate"><?php echo $this->__('Re-Sale Certificate') ?></label>
                    <div class="input-box">
                        <input type="file" name="designer_certificate" title="<?php echo $this->__('certificate') ?>" id="designer_certificate" />
                    </div>  

установщик атрибута файла

$installer = $this;
$installer->startSetup();

//$installer->getConnection()->addColumn($installer->getTable('customer/entity'), 'certificate', 'varchar(100)');
$installer->removeAttribute('customer', 'designer_certificate');
$installer->addAttribute("customer", "designer_certificate",  array(
    "type"     => "varchar",
    "backend"  => "",
    "label"    => "Designer Certificate",
    "input"    => "file",
    "source"   => "",
    "visible"  => true,
    "required" => false,
    "default" => "",
    "frontend" => "",
    "unique"     => false,
    "note"       => ""
    ));

        $attribute   = Mage::getSingleton("eav/config")->getAttribute("customer", "designer_certificate");


$used_in_forms=array();

$used_in_forms[]="adminhtml_customer";
$used_in_forms[]="checkout_register";
$used_in_forms[]="customer_account_create";
$used_in_forms[]="customer_account_edit";
$used_in_forms[]="adminhtml_checkout";
        $attribute->setData("used_in_forms", $used_in_forms)
        ->setData("is_used_for_customer_segment", true)
        ->setData("is_system", 0)
        ->setData("is_user_defined", 1)
        ->setData("is_visible", 1)
        ->setData("sort_order", 100)
        ;
        $attribute->save();

$installer->endSetup();

конфигурация:

<global>
....
<resources>
      <designercertificate_setup>
        <setup>
          <module>Renegade_Account</module>
          <class>Mage_Customer_Model_Entity_Setup</class>
        </setup>
        <connection>
          <use>core_setup</use>
        </connection>
      </designercertificate_setup>
      <designercertificate_write>
        <connection>
          <use>core_write</use>
        </connection>
      </designercertificate_write>
      <designercertificate_read>
        <connection>
          <use>core_read</use>
        </connection>
      </designercertificate_read>
    </resources>
....
    </global>

Теперь загрузите файл и просто сохраните как

    .....
        $path = Mage::getBaseDir('media') . DS .'customer'. DS . 'designer-certificates' . DS;
                if (!is_dir($path)) {
                    mkdir($path, 0777, true);
                }
                $filename = str_replace(' ', '_', trim($_FILES['designer_certificate']['name']));
Add a comment to this line
                $uploader->save($path, $filename);
                $file = "/designer-certificates/" . $filename;
                $customer->setDesignerCertificate($file);
    .....

файл должен быть сохранен на носителе, папка клиента для атрибута файла клиента, если вы хотите использовать встроенные функции.

person Hassan Ali Shahzad    schedule 03.03.2016

Прочтите этот блог.

Из вышеуказанного блога:

Одна из самых ожидаемых и необходимых вещей в Magento — это Пользовательская опция загрузки файлов. Как обсуждалось в прошлом году на форуме Magento, он не завершен и не протестирован.

Теперь у Magento уже есть внешний интерфейс и административная часть опции загрузки файлов, реализованная в темах. Так как бэкенд часть по-прежнему отсутствует, понимаю, что это все равно не работает, однако, если вам интересно, как это выглядит, читайте дальше..

Фронтенд html находится в:

приложение/дизайн/интерфейс/по умолчанию/по умолчанию/шаблон/каталог/продукт/представление/параметры/тип/файл.phtml

Код javascript внешнего интерфейса в:

app/design/frontend/default/default/template/catalog/product/view/options.phtml
(объект js optionFileUpload = асинхронная загрузка iframe)

Вы можете включить пользовательскую опцию загрузки файлов, если добавите:

<file translate="label" module="adminhtml">
    <label>File</label>
    <render>adminhtml/catalog_product_edit_tab_options_type_file</render>
    <types>
        <file translate="label" module="adminhtml">
            <label>File Upload</label>
        </file>
    </types>
</file>

внутренний узел:

config-›global-›catalog-›product-›options-›custom-›groups

in:

приложение/код/ядро/Маг/Каталог/и т.д./config.xml

Теперь у вас есть новая опция загрузки файлов, которую вы можете добавить к продукту!

Пока мы разрабатываем модуль с аналогичной функциональностью для одного из наших клиентов, но мы скрестили пальцы, чтобы увидеть эту опцию в следующей версии Magento!

person Mr_Green    schedule 10.04.2014