◄ Помощь ► Magento 2

In Magento 2, would it be wrong to create a Factory model that allows me to get a factory for any of the models in my module? The reason I ask is that injecting model factories into my blocks / controllers where I need them and it is becoming quite difficult to manage. The proposed Factory of factories model I propose would still use DI to inject the factory classes so nothing would be hardcoded.

Here's some example code:

Код:
namespace Vendor/Module/Model;

class Factory
{
    protected $_factories = null;

    public function __construct(
        FirstModelFactory $firstModelFactory,
        SecondModelFactory $secondModelFactory
    ) {
        $this->_factories = array(
            'FirstModelFactory' => $firstModelFactory,
            'SecondModelFactory' => $secondModelFactory
        );
    }

    public function getFactory($class)
    {
        return isset($this->_factories[$class])
            ? $this->_factories[$class]
            : false;
    }
}

I'm trying the creation cart via Soap with Java code below. The quote is created and inserted into the table, but when I add the product nothing happens and does not return any error. Already I researched on the internet and have not found much information about Magento with Java. Does anyone have any idea what might be missing in this code?

package clientesoapmagento;

import java.net.MalformedURLException; import java.util.List;

public class ClienteSoapMagento {


Код:
public static final String URL = "http://example.com.ru/index.php/api/v2_soap";
public static final String USER = "XXXXXX";
public static final String API_KEY = "XXXXXXXXXXXX";

[/ Code]


public static void main (String [] args) throws MalformedURLException {


[code]
MagentoService service = new MagentoService();
    PortType port = service.getPort();
    System.out.println(service.getServiceName()); 
    System.err.println(port);  // OK

    LoginParam loginParam = new LoginParam();
    loginParam.setUsername(USER);
    loginParam.setApiKey(API_KEY);

    LoginResponseParam session = port.login(loginParam);
    String sessionId = session.getResult();
    System.out.println("sessionId : " + sessionId);  // OK

    StoreListRequestParam param = new StoreListRequestParam();
    param.setSessionId(sessionId);

    StoreListResponseParam storeListRespParam = port.storeList(param);
    StoreEntityArray storeEntityArray = storeListRespParam.getResult();
    List<StoreEntity> stores = storeEntityArray.getComplexObjectArray();
    System.out.println(">>>> stores " + stores.size()); // OK

    ShoppingCartCreateRequestParam shoppingCartCreateRequestParam = new ShoppingCartCreateRequestParam();
    shoppingCartCreateRequestParam.setSessionId(sessionId);
    shoppingCartCreateRequestParam.setStore("1");

    ShoppingCartCreateResponseParam resp = port.shoppingCartCreate(shoppingCartCreateRequestParam);
    int quoteId = resp.getResult();
    System.out.println(">>>> quoteId " + quoteId);   //OK

    ShoppingCartProductAddRequestParam prodcutAddParam = new ShoppingCartProductAddRequestParam();

    ShoppingCartProductEntityArray array = new ShoppingCartProductEntityArray();
    ShoppingCartProductEntity produto = new ShoppingCartProductEntity();
    produto.setProductId("1");
    produto.setSku("D15");
    produto.setQty(1.00);
    produto.setLinks(null);
    produto.setBundleOption(null);
    produto.setBundleOptionQty(null);
    produto.setOptions(null);

    array.getComplexObjectArray().add(produto);
    prodcutAddParam.setProductsData(array);
    prodcutAddParam.setQuoteId(quoteId);
    prodcutAddParam.setSessionId(sessionId);
    prodcutAddParam.setStore("1");

    ShoppingCartProductAddResponseParam prodAddResult = new ShoppingCartProductAddResponseParam();
    System.out.println("product added? " + prodAddResult.isResult()); // RETURN FALSE
    EndSessionParam endSessionParam = new EndSessionParam();
    endSessionParam.setSessionId(sessionId);
    port.endSession(endSessionParam);
}

I have successfully override Customer Account Management model in Magento 2.

I have to update some code in authenticate function but i can not success its redirect to login page.

also I did lots of R&D but not able to get any proper solution.


Код:
namespace xxxxx\xxxxx\Model\Rewrite\Customer;
use Magento\Customer\Api\AccountManagementInterface;


class AccountManagement extends \Magento\Customer\Model\AccountManagement
{

    public function authenticate($username, $password)
        {
            $this->checkPasswordStrength($password);
            try {
                 $customer = $this->customerRepository->get($username);
            } catch (NoSuchEntityException $e) {
                throw new InvalidEmailOrPasswordException(__('Invalid login or password.'));
            }

          //My condition 
          if()
          {
            echo "My Custom logic";
            die;
          }else
          {
          //else

            $hash = $this->customerRegistry->retrieveSecureData($customer->getId())->getPasswordHash();

            if (!$this->encryptor->validateHash($password, $hash)) {
              throw new InvalidEmailOrPasswordException(__('Invalid login or password.'));
            }

            if ($customer->getConfirmation() && $this->isConfirmationRequired($customer)) {
              throw new EmailNotConfirmedException(__('This account is not confirmed.'));
            }


            $customerModel = $this->customerFactory->create()->updateData($customer);

            $this->eventManager->dispatch(
              'customer_customer_authenticated',
              ['model' => $customerModel, 'password' => $password]
            );

            $this->eventManager->dispatch('customer_data_object_login', ['customer' => $customer]);
          }
        }
}

also i have to check System configuration value in model file.

Can any one please help me if anyone knows?
 
Последнее редактирование модератором:
how can I create update bulk of products at a time programmatically

In the following code I have written to create a single simple product at a time, but I want to make a bulk creation of products at a time, can anyone help me in doing this?

Код:
Mage::app('default')->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
        $product = Mage::getModel('catalog/product');
        $product->setAttributeSetId($attributeSetId);//ID of a attribute set named 'default'
        $product->setTypeId('simple');  //product type
        $product->setWebsiteIds(array(1));
        $product->setSku($itemjson->getSku($i)); //SKU
        $product->setName($itemjson->getName($i)); //product name
        $product->setWeight($itemjson->getWeight($i));
        $product->setUpdatedAt(strtotime('now'));
        $product->setStatus(1);//product status (1 - enabled, 2 - disabled)
        $product->setTaxClassId(4); //tax class (0 - none, 1 - default, 2 - taxable, 4 - shipping)
        $product->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH); //catalog and search visibility
        $product->setPrice($price); //price in form 11.22
        $product->setDescription($itemjson->getDesc($i));
        $product->setShortDescription($itemjson->getShortDesc($i)) ;
        $product->setStockData(array(
               'use_config_manage_stock' => 0, //'Use config settings' checkbox
               'manage_stock'=>1, //manage stock
               'min_sale_qty'=>1, //Minimum Qty Allowed in Shopping Cart
               'max_sale_qty'=>1000, //Maximum Qty Allowed in Shopping Cart
               'is_in_stock' => 1, //Stock Availability
               'qty' => $itemjson->getStock($i), //qty
                )
            );
        $catArray=$itemjson->getSimpleCat($i);
        $catKeys=array_keys($catArray);
        $product = self::manageAttr($product,$catArray);
        $product->setCategoryIds($categories);
        $product->save();

Magento Element Order

A pretty basic question mainly because I'm still trying to wrap my head around Magento 2's templating system. But I'm just trying to switch the order of the mini-cart element and the search element in the header so that the search element is before the mini-cart element in the markup. For example, instead of

Код:
<Div data-block = "minicart" class = "minicart-wrapper"> ... </ div>
<Div class = "block block-search"> ... </ div>
[/ Code]

I want it to be:

[Code]
<Div class = "block block-search"> ... </ div>
<Div data-block = "minicart" class = "minicart-wrapper"> ... </ div>
[/ Code]

Can not update product page layout in custom theme
heavily modified the question for simplicity and clarity)

A case a test of As I of Created <custom-theme is> /Magento_Theme/layout/default_head_blocks.xml. Creating Company and Modifying the this file, according to the the docs, Should effect every page.

In my ext

Код:
<? Xml version = "1.0"?>
<Page xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi: noNamespaceSchemaLocation = "urn: magento: framework: View / Layout / etc / page_configuration.xsd">
    <Head>
        <Script src = "js / test-file.js" />
    </ Head>
</ Page>
[/ Code]

I can see test-file.js on category and CMS pages, but not on a product page.

Fact with In, I of CAN not the get the any updates to the layout have an effect on the product product page. Of The product product page has the inherited theme is the the Magento Blank, plus up my logo The site, Located in <-theme is the dir> /web/imges/logo.svg.

Any guidance on this issue would be appreciated.

Admin module Image upload code to display form

I have magento2 admin custom module with image upload functionality. I want to upload image from admin. what code should apply for display image field in from, upload image, also image display in edit action.

Thanks

File Path : app\code\[Vendor]\[Module]\Block\Adminhtml\Emp\Edit\Tab\Main.php


Код:
/**
     * Prepare form
     *
     * @return $this
     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
    */
    protected function _prepareForm()
    {
        $model = $this->_coreRegistry->registry('emp_post');

        $isElementDisabled = false;

        /** @var \Magento\Framework\Data\Form $form */
        $form = $this->_formFactory->create();

        $form->setHtmlIdPrefix('page_');

        $fieldset = $form->addFieldset('base_fieldset', ['legend' => __('Employee Information')]);

        if ($model->getId()) {
            $fieldset->addField('customer_id', 'hidden', ['name' => 'customer_id']);
        }

        $fieldset->addField(
            'firstname',
            'text',
            [
                'name' => 'firstname',
                'label' => __('First Name'),
                'title' => __('First Name'),
                'required' => true,
                'disabled' => $isElementDisabled,
                'value' =>'abc'
            ]
        );

        $fieldset->addField(
            'lastname',
            'text',
            [
                'name' => 'lastname',
                'label' => __('Last Name'),
                'title' => __('Last Name'),
                'required' => true,
                'disabled' => $isElementDisabled,
                'value' =>'abc'
            ]
        );

        $fieldset->addField(
            'email',
            'text',
            [
                'name' => 'email',
                'label' => __('Email Address'),
                'title' => __('Email Address'),
                'required' => true,
                'disabled' => $isElementDisabled,
                'value' =>'abc'
            ]
        );


        $fieldset->addField(
            'image',
            'image',
            array(
                'name' => 'image',
                'label' => __('Image'),
                'title' => __('Image')
            )
        );

        $fieldset->addField(
            'telephone',
            'text',
            [
                'name' => 'telephone',
                'label' => __('Telephone'),
                'title' => __('Telephone'),
                'required' => true,
                'disabled' => $isElementDisabled,
                'value' =>'abc'
            ]
        );

        $dateFormat = $this->_localeDate->getDateFormat(
            \IntlDateFormatter::SHORT
        );

        $fieldset->addField(
            'dob',
            'date',
            [
                'name' => 'dob',
                'label' => __('Date of birth'),
                'date_format' => $dateFormat,
                'disabled' => $isElementDisabled,
                'class' => 'validate-date validate-date-range date-range-custom_theme-from'
            ]
        );

        $fieldset->addField(
            'is_active',
            'select',
            [
                'label' => __('Status'),
                'title' => __('Status'),
                'name' => 'is_active',
                'required' => true,
                'options' => $this->_status->getOptionArray(),
                'disabled' => $isElementDisabled
            ]
        );
        if (!$model->getId()) {
            $model->setData('is_active', $isElementDisabled ? '0' : '1');
        }


        if($model->getData('image')){
            $model->setData('image','learning/images'.$model->getData('image'));
        }

        $form->setValues($model->getData());
        $this->setForm($form);

        return parent::_prepareForm();
    }
 
Последнее редактирование модератором:
Всем привет! Скажите, пожалуйста, корректна будет работа магазина при таких условиях:
Являясь владельцем каталога Magento 2, войдя под ним в командной строке все команды не работают без приставки sudo.
К примеру хочу сгенирировать статический контент командой: php /var/www/mageto2/html/bin/magento cache:clean
Вопрос возник из-за того, что делая команды из под sudo пользователя, создаваемые папки имеют владельца root, либо www-data, а все остальные файлы соответственно остаются принадлежать созданному пользователю Magento 2. Нормальная ли это картина или это чревато?

нет, это ненормально.
чревато тем, что веб-юзер в теории может иметь root права и сделать что захочет.
Дело в том, что каталог находится в папке var/www/, которая изначально принадлежит руту. Именно поэтому, команды magento не выполняются без sudo. На деле есть usernew (соcтоящий в группе sudo), ему принадлежит каталог magento 2. Скажите, пожалуйста, как должно быть?

папка не должна быть у рута.
владельцем папки должен быть юзер, от имени которого работает веб-сервер.
т.е. по сути - у вас кривая конфигурация, должно быть типа /var/www/user/vhost/
По идее у меня то же самое /var/www/папка с названием домена (владелец юзер)/html - папка в которой лежит magento 2. Начиная с папки с названием домена всё принадлежит юзеру. Но когда я хочу почистить кэш через командную строку, то без судо команды не хочет делать. Пишет, что нет полномочий для папки var. Но это же классика, такая расстановка везде по умолчанию и различным документациям. А когда генерирую статические файлы из под судо, то они сначала появляются под владельцев root, а после открытия страницы www-data. www-da - по идее нормально потому, что их обрабатывает сервер. Могу ошибся. В общем непонятная ситуация. Помогите, пожалуйста, разобраться, чтобы все команды Magento обрабатывались корректно.
 
Последнее редактирование модератором:
Всем привет! Скажите, пожалуйста, корректна будет работа магазина при таких условиях:
Являясь владельцем каталога Magento 2, войдя под ним в командной строке все команды не работают без приставки sudo.
К примеру хочу сгенирировать статический контент командой: php /var/www/mageto2/html/bin/magento cache:clean
Вопрос возник из-за того, что делая команды из под sudo пользователя, создаваемые папки имеют владельца root, либо www-data, а все остальные файлы соответственно остаются принадлежать созданному пользователю Magento 2. Нормальная ли это картина или это чревато?
нет, это ненормально.
чревато тем, что веб-юзер в теории может иметь root права и сделать что захочет.

Дело в том, что каталог находится в папке var/www/, которая изначально принадлежит руту. Именно поэтому, команды magento не выполняются без sudo. На деле есть usernew (соcтоящий в группе sudo), ему принадлежит каталог magento 2. Скажите, пожалуйста, как должно быть?
папка не должна быть у рута.
владельцем папки должен быть юзер, от имени которого работает веб-сервер.
т.е. по сути - у вас кривая конфигурация, должно быть типа /var/www/user/vhost/

По идее у меня то же самое /var/www/папка с названием домена (владелец юзер)/html - папка в которой лежит magento 2. Начиная с папки с названием домена всё принадлежит юзеру. Но когда я хочу почистить кэш через командную строку, то без судо команды не хочет делать. Пишет, что нет полномочий для папки var. Но это же классика, такая расстановка везде по умолчанию и различным документациям. А когда генерирую статические файлы из под судо, то они сначала появляются под владельцев root, а после открытия страницы www-data. www-da - по идее нормально потому, что их обрабатывает сервер. Могу ошибся. В общем непонятная ситуация. Помогите, пожалуйста, разобраться, чтобы все команды Magento обрабатывались корректно.
может домашняя директория не выставляется корректно.
 
Последнее редактирование модератором:
Привет, Маджентовцы!:) Настроил сервер: ubuntu 16.04, nginx, php7, MySQL 5.7. Оперативки 1 гиг, процессор 2 x 2,7 ГГц. Загрузка сайта: 0.12 секунды. Проблемы такие: ужасно медленно работает админка, обновляет страницу или совершает запрос 3-4 секунды. На сайте долго грузится фото и галерея на странице товара, будто фото нет в кэше. И задержка приветствия в хэдере на 2-3 секунды. Ответьте, пожалуйста на вопрос, что мог упустить или дело в самой Magento 2?

Опкеш поставил
Уточните, пожалуйста, что имеется ввиду? Когда устанfвливал php, модули были такие: php7.0-fpm php7.0-common php7.0-gd php7.0-mysql php7.0-mcrypt php7.0-curl php7.0-intl php7.0-xsl php7.0-mbstring php7.0-zip php7.0-bcmath php7.0-iconv php7.0-opcache php7.0-soap php7.0-json php7.0-xml
 
Последнее редактирование модератором:
Привет, Маджентовцы!:) Настроил сервер: ubuntu 16.04, nginx, php7, MySQL 5.7. Оперативки 1 гиг, процессор 2 x 2,7 ГГц. Загрузка сайта: 0.12 секунды. Проблемы такие: ужасно медленно работает админка, обновляет страницу или совершает запрос 3-4 секунды. На сайте долго грузится фото и галерея на странице товара, будто фото нет в кэше. И задержка приветствия в хэдере на 2-3 секунды. Ответьте, пожалуйста на вопрос, что мог упустить или дело в самой Magento 2?
Привет, Опкеш поставил ?(он обычно в коробке идет, но можно и упустить при желании, как я например и админка так же грузилась). И 1 гиг оперативки это мягко сказать мало - для сравнения у меня 50.
Поставь Для просмотра ссылки Войди или Зарегистрируйся и проверь что у тебя грузится дольше всего.

Уточните, пожалуйста, что имеется ввиду? Когда устанfвливал php, модули были такие: php7.0-fpm php7.0-common php7.0-gd php7.0-mysql php7.0-mcrypt php7.0-curl php7.0-intl php7.0-xsl php7.0-mbstring php7.0-zip php7.0-bcmath php7.0-iconv php7.0-opcache php7.0-soap php7.0-json php7.0-xml
Модуль что я прикрепил не ставьте - он для первой версии - ошибся. opcache у вас в списке есть. Нужно смотреть время запросов - чтоб выявить что именно грузит
 
Последнее редактирование модератором:
Модуль что я прикрепил не ставьте - он для первой версии - ошибся. opcache у вас в списке есть. Нужно смотреть время запросов - чтоб выявить что именно грузит
В админке абсолютно все действия с задержкой. А на сайте всё быстро, кроме фото на странице товара и приветствие сверху. Все фото оптимизированные.
 
Доброго дня!
Залил, установил, после решил проиндексировать все через ssh (хостинг sweb)
Код:
$ php magento indexer:reindex
PHP Parse error:  syntax error, unexpected T_STRING in /home/r/ru260777/time-saver/public_html/bin/magento on line 20

сама 20 строка в файле magento
Код:
    $handler = new  \Magento\Framework\App\ErrorHandler();

Что делаю не так? =)
 
Всем привет! Magento 2 сильно снижает качество фото товара, установил модуль php-imagick на сервере, в админке магазина сменил процесс сжатия с GD2 на ImageMagick. Разницы никакой, не обнаружил, такие же артефакты на фото после загрузки. Кто имел опыт в данном вопросе, поделитесь, пожалуйста, решением.
 
Всем привет! Magento 2 сильно снижает качество фото товара, установил модуль php-imagick на сервере, в админке магазина сменил процесс сжатия с GD2 на ImageMagick. Разницы никакой, не обнаружил, такие же артефакты на фото после загрузки. Кто имел опыт в данном вопросе, поделитесь, пожалуйста, решением.

предлагаю переопределить Magento\Catalog\Model\Product\Image - в нем качество сохранения 80% и установить 95 Для просмотра ссылки Войди или Зарегистрируйся

а потом заморочиться с применением uhsharp фильтра (кажется тут Для просмотра ссылки Войди или Зарегистрируйся) мы делать на симфони применение фильтра резкости - превьюшки прям сильно качественнее становятся.
 
Назад
Сверху