В то время как 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
Всякий раз, когда у вас есть объект продукта, вы можете получить доступ к его набору атрибутов следующим образом:
$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');
}
Надеюсь, это поможет!
Для большей сексуальности вы можете сократить ее до:
$attributeSetName = Mage::getModel('eav/entity_attribute_set')->load( Для большей сексуальности вы можете сократить ее до:
[110]product->getAttributeSetId())->getAttributeSetName();
Попробуйте следующий код:
$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;
Более подробную информацию о наборе атрибутов можно найти в следующей статье .
Благодаря
Ответ Джо требует нескольких изменений, чтобы он работал.
Во-первых, это должен быть $ _product, а не $ product, а во-вторых, в последней строке есть ошибочный ')'.
Следующий код должен быть правильным:
$attributeSetModel = Mage::getModel("eav/entity_attribute_set");
$attributeSetModel->load( Ответ Джо требует нескольких изменений, чтобы он работал.
Во-первых, это должен быть $ _product, а не $ product, а во-вторых, в последней строке есть ошибочный ')'.
Следующий код должен быть правильным:
[110]product->getAttributeSetId());
$attributeSetName = $attributeSetModel->getAttributeSetName();
Сравнение с текстовым значением может вызвать проблемы, если пользователи решат позже изменить этот текст - что легко сделать в Magento для наборов атрибутов. Еще один вариант - использовать базовый идентификатор, который никогда не изменится.
Вы можете получить это, посмотрев значение столбца attribute_set_id в базе данных, используя
select * from eav_attribute_set;
Это число также есть в ссылке для редактирования в admin, которая выделена жирным шрифтом ниже
http: //.../index.php/admin/catalog_product_set/edit/id/ 10 / key / 6fe89fe2221cf2f80b82ac2ae457909ce04c92c51716b3e474ecad672a2ae2f3 /
117117] это свойство продукта. Основываясь на идентификаторе 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
}