সিস্টেম কনফিগারেশনে আমি কীভাবে আমার কাস্টম গতিশীল ক্ষেত্রে চিত্রের ক্ষেত্র যুক্ত করব?


10

আমি অ্যাডমিন ব্যবহারকারীকে যতটা ক্ষেত্র উত্পাদন করতে দেয় তার অনুমতি দিতে চাই। আমি অন্য এক্সটেনশনে একটি সমাধান পেয়েছি এবং আমি এটিকে আমার সূচনা পয়েন্ট হিসাবে ব্যবহার করেছি। সুতরাং আমার কাছে এই জাতীয় কোড রয়েছে:

ইন system.xml:

<showcases translate="label">
    <label>Showcases</label>
    <frontend_type>text</frontend_type>
    <sort_order>10</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>1</show_in_store>
    <fields>
        <showcase translate="label">
            <label>Showcases</label>
            <frontend_type>select</frontend_type>
            <frontend_model>awesomehome/adminhtml_showcases</frontend_model>
            <backend_model>adminhtml/system_config_backend_serialized</backend_model>
            <sort_order>410</sort_order>
            <show_in_default>1</show_in_default>
            <show_in_website>1</show_in_website>
            <show_in_store>1</show_in_store>
        </showcase>
    </fields>
</showcases>

এবং এর মধ্যে Namespace/Awesomehome/Block/Adminhtml/Showcases.php:

class Namespace_Awesomehome_Block_Adminhtml_Showcases 
    extends Mage_Adminhtml_Block_System_Config_Form_Field
{
    protected $_addRowButtonHtml = array();
    protected $_removeRowButtonHtml = array();

    protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
    {
        $this->setElement($element);

        $html = '<div id="showcase_template" style="display:none">';
        $html .= $this->_getRowTemplateHtml();
        $html .= '</div>';

        $html .= '<ul id="showcase_container">';
        if ($this->_getValue('showcases')) {
            foreach (array_keys($this->_getValue('showcases')) as $row) {
                if ($row) {
                    $html .= $this->_getRowTemplateHtml($row);
                }
            }
        }
        $html .= '</ul>';
        $html .= $this->_getAddRowButtonHtml(
            'showcase_container',
            'showcase_template', $this->__('Add new showcase')
        );

        return $html;
    }

    protected function _getRowTemplateHtml($row = 0)
    {
        $html = '<li><fieldset>';

        $html .= $this->_getShowcaseTypeHtml($row);

        $html .= $this->_getRemoveRowButtonHtml();
        $html .= '</fieldset></li>';

        return $html;
    }

    protected function _getShowcaseTypeHtml($row) {
        $html = '<label>' . $this->__('Showcase type:') . '</label>';

        $html .= '<select style="width:100%;" class="input-text" name="' . $this->getElement()->getName() . '[type][]">';
        $html .= '<option value="1" '
                . ($this->_getValue('type/' . $row) == "1" ? 'selected="selected"' : '') .'>'
                . $this->__("Simple") . "</option>";
        $html .= '<option value="2" '
                . ($this->_getValue('type/' . $row) == "2" ? 'selected="selected"' : '') .'>'
                . $this->__("With Image") . "</option>";

        $html .= '</select><br/>';
        return $html;
    }

এটি প্রত্যাশার মতো কাজ করে এবং এটি এর মতো:

এখানে চিত্র বর্ণনা লিখুন

এখন আমি আমার ফিল্ডসেটে একটি চিত্র আপলোড ক্ষেত্র যুক্ত করতে চাই। আমি এটা কিভাবে করব?

আপডেট :

আমি জানি যে আপনি system.xmlচিত্রের ক্ষেত্রগুলি যুক্ত করতে এই কোডটি লিখতে পারেন:

<image translate="label">
    <label>Image</label>
    <frontend_type>image</frontend_type>
    <backend_model>adminhtml/system_config_backend_image</backend_model>
    <upload_dir config="system/filesystem/media" scope_info="1">awesomehome/topcategories</upload_dir>
    <base_url type="media" scope_info="1">awesomehome/topcategories</base_url>
    <sort_order>30</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>1</show_in_store>
    <comment>Allowed file types: jpeg, gif, png.</comment>
</image>

তবে আমি এই পদ্ধতির ব্যবহার করতে পারি না কারণ আমি একাধিক ক্ষেত্র চাই না।

উত্তর:


2
Add this in your system.xml

<logo translate="label comment">
<label>Logo</label>
<comment>Allowed file types: jpeg, gif, png.</comment>
<frontend_type>image</frontend_type>
<backend_model>adminhtml/system_config_backend_image</backend_model>
<upload_dir config="system/filesystem/media" scope_info="1">theme</upload_dir>
<base_url type="media" scope_info="1">theme</base_url>
<sort_order>1</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</logo>

উপাদানটি সেই অবস্থানের প্রতিনিধিত্ব করে যেখানে চিত্রটি আপলোড করা হবে। উপরের উদাহরণে, চিত্রটি মিডিয়া ফোল্ডারের নীচে একটি সাব-ফোল্ডারে সংরক্ষণ করা হবে। যেমন / মিডিয়া / থিম /। ট্যাগটি রেন্ডারিংয়ের জন্য উপাদানটি ব্যবহৃত হয়। উপরের উদাহরণ থেকে চিত্র আউটপুট করতে, আপনি নিম্নলিখিত কোডটি ব্যবহার করতে পারেন

echo Mage::getBaseUrl('media') . Mage::getStoreConfig('system_config_name/group/logo');

আমি system.xmlআমার ক্ষেত্রে ব্যবহার করতে পারি না । আমার প্রশ্নটি আবার পড়ুন।
পেড্রাম বেহরোজি

তবে আপনি কেন এটি ব্যবহার করতে পারবেন না
বিবেক খানদেলওয়াল

কারণ আপনার পদ্ধতির সিস্টেম কনফিগারেশনে একটি চিত্র ক্ষেত্র যুক্ত হয়েছে। আমি গতিশীল সংখ্যক চিত্র ক্ষেত্র রাখতে চাই।
পেদরাম বেহরোজি

ঠিক আছে. আমি আপনাকে একটি ভিন্ন পন্থা বলব
বিবেক খানদেলওয়াল

1

আমি অনুরূপ কিছু চেষ্টা করেছি এবং কেবল এটি আংশিকভাবে সমাধান পেয়েছি।

প্রথমে, আপনার অ্যারের / ধারাবাহিকভাবে কনফিগ বিকল্প ক্ষেত্র একাধিক প্রকারের যোগ করতে চাইলে, আমি ক্লাসের একটি বর্ধিত সংস্করণ তৈরি Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstractকরে ধরনের অন্তর্ভুক্ত select, multiselectএবং file(মূল ফাংশন কেবলমাত্র আপনি ব্যবহার করার অনুমতি দেওয়া হিসাবে textটাইপ), দেখতে HTTPS: / /github.com/Genmato/Core/blob/master/app/code/commune/Genmat/Core/Block/System/Config/Form/Feld/Array/Abstract.php (ফাইলটি এখানে অন্তর্ভুক্ত করার জন্য কিছুটা বড়)।

পরবর্তী আমি জানতে পেরেছি যে অন্যান্য (নির্বাচন / পাঠ্য) ক্ষেত্রগুলির সাথে ফাইলের ধরণের সংমিশ্রণ সঠিকভাবে কাজ করে না। ডেটা সংরক্ষণ করার সময় কেবলমাত্র ফাইলের বিশদ যেখানে পাওয়া যায় এবং অ্যারেটি মিশে যায়। সুতরাং আমি আপলোডগুলি সংরক্ষণের জন্য একটি ক্ষেত্রের সমাধানের বিকল্প বেছে নিয়েছি:

<templates translate="label comment">
                            <label>Templates</label>
                            <frontend_model>genmato_addresslabel/system_config_form_templates</frontend_model>
                            <backend_model>genmato_addresslabel/system_config_backend_storefile</backend_model>
                            <sort_order>1</sort_order>
                            <show_in_default>1</show_in_default>
                            <show_in_website>0</show_in_website>
                            <show_in_store>0</show_in_store>
                            <upload_dir config="system/filesystem/media" scope_info="1">addresslabel</upload_dir>
                            <base_url type="media" scope_info="1">addresslabel</base_url>
                            <comment>Label templates, to be used as background in the PDF (only PDF files are allowed)</comment>
                        </templates>

সংশ্লিষ্ট ব্লক শ্রেণি:

class Genmato_AddressLabel_Block_System_Config_Form_Templates extends Genmato_Core_Block_System_Config_Form_Field_Array_Abstract
{
    public function __construct()
    {
        $this->addColumn('template', array(
            'label' => Mage::helper('genmato_addresslabel')->__('Template'),
            'style' => 'width:300px',
            'class' => '',
            'type' => 'file',
        ));

        $this->_addAfter = false;
        $this->_addButtonLabel = Mage::helper('genmato_addresslabel')->__('Add new item');
        $this->setTemplate('genmato/core/system/config/form/field/array.phtml');
        parent::__construct();
    }

}

এবং ব্যাকএন্ড মডেল শ্রেণি:

class Genmato_AddressLabel_Model_System_Config_Backend_Storefile extends Mage_Adminhtml_Model_System_Config_Backend_File
{

    protected function _afterLoad()
    {
        $value = (string)$this->getValue();
        $this->setValue(empty($value) ? false : unserialize($value));
    }

    protected function _beforeSave()
    {

        $value = $this->getValue();

        // Load current template data
        $data = unserialize(Mage::getStoreConfig($this->getPath()));

        // Check for deleted records
        if (is_array($data)) {
            foreach ($data as $key => $val) {
                if (!isset($value[$key])) {
                    unset($data[$key]);
                }
            }
        }

        // check for new uploads.
        foreach ($value as $key => $val) {
            if (!is_array($val)) {
                continue;
            }
            foreach ($val as $filefield => $filevalue) {
                try {
                    if ($_FILES['groups']['tmp_name'][$this->getGroupId()]['fields'][$this->getField()]['value'][$key][$filefield]) {
                        $file = array();
                        $tmpName = $_FILES['groups']['tmp_name'];
                        $file['tmp_name'] = $tmpName[$this->getGroupId()]['fields'][$this->getField()]['value'][$key][$filefield];
                        $name = $_FILES['groups']['name'];
                        $file['name'] = $name[$this->getGroupId()]['fields'][$this->getField()]['value'][$key][$filefield];

                        if (isset($file['tmp_name']) || empty($file['tmp_name'])) {
                            $uploadDir = $this->_getUploadDir();

                            $uploader = new Mage_Core_Model_File_Uploader($file);
                            $uploader->setAllowedExtensions($this->_getAllowedExtensions());
                            $uploader->setAllowRenameFiles(true);
                            $result = $uploader->save($uploadDir);

                            $filename = $result['file'];
                            if ($filename) {
                                if ($this->_addWhetherScopeInfo()) {
                                    $filename = $this->_prependScopeInfo($filename);
                                }

                            }
                            $data[$key]['template'] = $filename;
                        } else {

                        }
                    }

                } catch (Exception $e) {
                    Mage::throwException($e->getMessage());
                    return $this;
                }
            }
        }

        $this->setValue(serialize($data));

        return $this;
    }

}

এবং একটি দ্বিতীয় ক্ষেত্র যেখানে আমি আমার কনফিগারেশন সঞ্চয় করি:

<config translate="label comment">
                            <label>Label configurations</label>
                            <frontend_model>genmato_addresslabel/system_config_form_config</frontend_model>
                            <backend_model>genmato_pdflib/system_config_backend_storeserial</backend_model>
                            <sort_order>2</sort_order>
                            <show_in_default>1</show_in_default>
                            <show_in_website>0</show_in_website>
                            <show_in_store>0</show_in_store>
                            <comment>Label configuration, you can create multiple label configurations for different usages</comment>
                        </config>

এবং ব্লক শ্রেণি ব্যবহৃত:

class Genmato_AddressLabel_Block_System_Config_Form_Config extends Genmato_Core_Block_System_Config_Form_Field_Array_Abstract
{
    public function __construct()
    {

        $this->addColumn('name', array(
            'label' => Mage::helper('genmato_addresslabel')->__('Name'),
            'style' => 'width:100px',
        ));

        $this->addColumn('template', array(
            'label' => Mage::helper('genmato_addresslabel')->__('Use template'),
            'style' => 'width:100px',
            'type' => 'select',
            'options' => Mage::getModel('genmato_addresslabel/system_config_source_templates')->getTemplates(),
        ));

        $this->addColumn('width', array(
            'label' => Mage::helper('genmato_addresslabel')->__('W (mm)'),
            'style' => 'width:40px'
        ));

        $this->addColumn('height', array(
            'label' => Mage::helper('genmato_addresslabel')->__('H (mm)'),
            'style' => 'width:40px'
        ));

        $this->addColumn('rotate', array(
            'label' => Mage::helper('genmato_addresslabel')->__('Rotate 90'),
            'type' => 'select',
            'options' => array("0" => "No", "1" => "Yes"),
            'style' => 'width:50px'
        ));

        $this->addColumn('multiple', array(
            'label' => Mage::helper('genmato_addresslabel')->__('Multiple labels'),
            'type' => 'select',
            'options' => array("0" => "No", "1" => "Yes"),
            'style' => 'width:50px'
        ));

        $this->addColumn('label_width', array(
            'label' => Mage::helper('genmato_addresslabel')->__('W (mm)'),
            'style' => 'width:40px'
        ));

        $this->addColumn('label_height', array(
            'label' => Mage::helper('genmato_addresslabel')->__('H (mm)'),
            'style' => 'width:40px'
        ));

        $this->_addAfter = false;
        $this->_addButtonLabel = Mage::helper('genmato_addresslabel')->__('Add new item');
        $this->setTemplate('genmato/core/system/config/form/field/array.phtml');
        parent::__construct();
    }

}

প্রতি কনফিগার সারিতে আপলোড করা ফাইলটি নির্বাচন করতে আমি একটি সিলেক্ট / ড্রপডাউন বিকল্প ব্যবহার করি, এটি আমাকে একাধিক সারিতে একই ফাইলটি ব্যবহার করতে দেয়।

এটি আপনার পরিস্থিতির জন্য নিখুঁত সমাধান নাও হতে পারে, তবে আপনার সমস্যা সমাধানের জন্য এটি একটি সূচনা পয়েন্ট হতে পারে। আপনার নিজের সমাধানের জন্য জেনোমেট_কোড় ( https://github.com/Genmato/Core দেখুন ) মডিউলটিতে ব্যবহৃত কোডের কিছু অংশ নির্দ্বিধায় ব্যবহার করুন ।


ধন্যবাদ। আমি আজ এটি চেষ্টা করব এবং আপনাকে জানাব। এটা আশাব্যঞ্জক বলে মনে হচ্ছে।
পেডরাম বেহরোজি

@ পেড্রামবেহরোজি আপনি কি চেষ্টা করে দেখেছেন এবং তা কার্যকর হয়েছে? আমিও আগ্রহী হব :)
সিমন্তেচরকারী

@ সিমন্তেসরিসর এখনও করেন নি, তবে শনিবারের আগে আমার সাথে এটি করা উচিত। শীঘ্রই আপডেট হবে।
পেদ্রাম বেহরোজি

-1

নীচের লিঙ্কগুলি আপনাকে আপনার প্রশ্নের সমাধান করতে সহায়তা করে।

http://www.mydons.com/how-to-display-image-preview-in-admin-form-magento/

থাম্বনেইল চিত্রটি দেখান এবং কাস্টম মডিউল প্রশাসক আকারে চিত্র মুছুন


পরিবর্তে লিঙ্কগুলি পোস্ট করার পরিবর্তে কিছু কোড পোস্ট করুন লিঙ্কগুলি আর কাজ করে না
rob3000
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.