Как я добираюсь, атрибут определил имя?

В то время как Click не имеет dest -эквивалента argparse, он имеет определенное поведение именования аргументов, которое может быть использовано. В частности, для параметров с несколькими возможными именами он предпочтет не пунктирные имена, а как вторичные предпочтения, приоритет будет определять более длинные имена по более коротким именам.

URL: http: //click.pocoo .org / dev / parameters / # parameter-names

Итак, если вы объявите свою опцию как ...

@click.option('--format', 'not-format', type=click.Choice(['t', 'j']))

... затем щелкните по приоритетам, -dashed ('not-format') и вызовите свою функцию с аргументом not_format=....

Конечно, это также означает, что это альтернативное правописание также можно использовать в командной строке. Если это нежелательно, то я думаю, вы могли бы добавить декоратор для переименования аргументов ключевого слова:

import functools

def rename_kwargs(**replacements):
    def actual_decorator(func):
        @functools.wraps(func)
        def decorated_func(*args, **kwargs):
            for internal_arg, external_arg in replacements.iteritems():
                if external_arg in kwargs:
                    kwargs[internal_arg] = kwargs.pop(external_arg)
            return func(*args, **kwargs)
        return decorated_func
    return actual_decorator

Код тестирования:

if __name__ == '__main__':

    @rename_kwargs(different_arg='format')
    def tester(different_arg):
        print different_arg

    tester(format='test value')

Выход теста:

$ python test_decor.py
test value

В вашем случае это будет выглядеть так:

@click.option('--format', type=click.Choice(['t', 'j']))
@replace_kwargs(not_format='format')
def plug(not_format):
    pass

30
задан Mahmood Rehman 30 May 2016 в 05:03
поделиться

5 ответов

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

$attributeSetModel = Mage::getModel("eav/entity_attribute_set");
$attributeSetModel->load($product->getAttributeSetId());
$attributeSetName  = $attributeSetModel->getAttributeSetName();

Это даст вам имя набора атрибутов, которое вы затем сможете сравнить, используя strcmp:

if(0 == strcmp($attributeSetName, 'My Attribute Set')) {
    print $product->getAttributeText('attribute');
}

Надеюсь, это поможет!

70
ответ дан Jonathan Marzullo 30 May 2016 в 05:03
поделиться

Для большей сексуальности вы можете сократить ее до:

$attributeSetName = Mage::getModel('eav/entity_attribute_set')->load(

Для большей сексуальности вы можете сократить ее до:

[110]product->getAttributeSetId())->getAttributeSetName();
24
ответ дан trish 30 May 2016 в 05:03
поделиться

Попробуйте следующий код:

$entityTypeId = Mage::getModel('eav/entity')
                ->setType('catalog_product')
                ->getTypeId();
$attributeSetName   = 'Default';
$attributeSetId     = Mage::getModel('eav/entity_attribute_set')
                    ->getCollection()
                    ->setEntityTypeFilter($entityTypeId)
                    ->addFieldToFilter('attribute_set_name', $attributeSetName)
                    ->getFirstItem()
                    ->getAttributeSetId();
echo $attributeSetId;

Более подробную информацию о наборе атрибутов можно найти в следующей статье .

Благодаря

13
ответ дан Roman Snitko 30 May 2016 в 05:03
поделиться

Ответ Джо требует нескольких изменений, чтобы он работал.

Во-первых, это должен быть $ _product, а не $ product, а во-вторых, в последней строке есть ошибочный ')'.

Следующий код должен быть правильным:

$attributeSetModel = Mage::getModel("eav/entity_attribute_set");
$attributeSetModel->load(

Ответ Джо требует нескольких изменений, чтобы он работал.

Во-первых, это должен быть $ _product, а не $ product, а во-вторых, в последней строке есть ошибочный ')'.

Следующий код должен быть правильным:

[110]product->getAttributeSetId()); $attributeSetName = $attributeSetModel->getAttributeSetName();
1
ответ дан Bit32 30 May 2016 в 05:03
поделиться

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

Вы можете получить это, посмотрев значение столбца attribute_set_id в базе данных, используя

select * from eav_attribute_set;

Это число также есть в ссылке для редактирования в admin, которая выделена жирным шрифтом ниже

http: //.../index.php/admin/catalog_product_set/edit/id/ 10 / key / 6fe89fe2221cf2f80b82ac2ae457909ce04c92c51716b3e474ecad672a2ae2f3 /

117

117] это свойство продукта. Основываясь на идентификаторе 10 в ссылке выше это будет просто

if (10 == 

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

Вы можете получить это, посмотрев значение столбца attribute_set_id в базе данных, используя

[110]

Это число также есть в ссылке для редактирования в admin, которая выделена жирным шрифтом ниже

http: //.../index.php/admin/catalog_product_set/edit/id/ 10 / key / 6fe89fe2221cf2f80b82ac2ae457909ce04c92c51716b3e474ecad672a2ae2f3 /

117

117] это свойство продукта. Основываясь на идентификаторе 10 в ссылке выше это будет просто

[111]product->getAttributeSetId()) { //Do work }
0
ответ дан Andrew Rutter 30 May 2016 в 05:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: