- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在为 Prestashop 编写自定义 Controller 。它应该做一个简单的任务:1.如果没有创建一个新的购物车(工作正常)2. 从数据库中获取属性 ID(工作正常)3.分配自定义(一个文本字段)4. 将此产品添加到购物车。
我当前的代码:
$idProduct = 1; // for me it's always one
$qty= 1; // always add one item
$text = (string)Tools::getValue('textField9'); // string of text customization
$attribute = (int)Tools::getValue('sel_combination'); // atribute combination ID
// get cart id if exists
if ($this->context->cookie->id_cart)
{
$cart = new Cart($this->context->cookie->id_cart);
}
// create new cart if needed
if (!isset($cart) OR !$cart->id)
{
$cart = new Cart();
$cart->id_customer = (int)($this->context->cookie->id_customer);
$cart->id_address_delivery = (int) (Address::getFirstCustomerAddressId($cart->id_customer));
$cart->id_address_invoice = $cart->id_address_delivery;
$cart->id_lang = (int)($this->context->cookie->id_lang);
$cart->id_currency = (int)($this->context->cookie->id_currency);
$cart->id_carrier = 1;
$cart->recyclable = 0;
$cart->gift = 0;
$cart->add();
$this->context->cookie->id_cart = (int)($cart->id);
$cart->update();
}
// get product to add into cart
$productToAdd = new Product(1, true, (int)($this->context->cookie->id_lang));
// default attributes
// $default_id_product_attribute = Product::getDefaultAttribute($productToAdd->id, $minimumQuantity);
// assign real attributes
$attributes = $attribute;
$cart->update();
// add customizatated text
$customization = $this->context->cart->addTextFieldToProduct((int)($idProduct), 9, Product::CUSTOMIZE_TEXTFIELD, $text );
$exising_customization = Db::getInstance()->executeS('SELECT id_customization FROM '._DB_PREFIX_.'customized_data ORDER BY id_customization DESC LIMIT 0,1');
$customization = $exising_customization[0]['id_customization'];
Db::getInstance()->execute('UPDATE ps_customization SET in_cart = 1, id_product_attribute = '.$attributes.' WHERE id_customization = ' .$customization);
// add product to cart
$cart->updateQty($qty, (int)($idProduct), (int)($attributes), (int)($customization), Tools::getValue('op', 'up'));
$prods = $cart->getProducts(true);
print_r ($prods[0]['id_customization']);
// update cart
$cart->update();
购物车已创建并向其中添加了产品。购物车显示,只有一种产品 - 但未显示。重新加载上述代码后,购物车会显示 2 个具有适当自定义数据的项目。
据我所知,问题出在定制上。第一次未分配($cart->getProducts(true); 显示 ['id_customization'] 为空),但第二次一切正常。即使是第一个产品也是固定的。
最佳答案
我设法解决了这个问题。
创建购物车的正确方法:
if (!$this->context->cart->id)
{
if (Context::getContext()->cookie->id_guest)
{
$guest = new Guest(Context::getContext()->cookie->id_guest);
$this->context->cart->mobile_theme = $guest->mobile_theme;
}
$this->context->cart->add();
if ($this->context->cart->id)
$this->context->cookie->id_cart = (int)$this->context->cart->id;
}
添加自定义
$this->product = new Product(1, true, (int)($this->context->cookie->id_lang));
$authorized_text_fields = array();
if (!$field_ids = $this->product->getCustomizationFieldIds())
return false;
foreach ($field_ids as $field_id)
if ($field_id['type'] == Product::CUSTOMIZE_TEXTFIELD)
$authorized_text_fields[(int)$field_id['id_customization_field']] = 'textField'.(int)$field_id['id_customization_field'];
$indexes = array_flip($authorized_text_fields);
foreach ($_POST as $field_name => $value)
if (in_array($field_name, $authorized_text_fields) && !empty($value))
{
if (!Validate::isMessage($value))
$this->errors[] = Tools::displayError('Invalid message');
else
$this->context->cart->addTextFieldToProduct($this->product->id, $indexes[$field_name], Product::CUSTOMIZE_TEXTFIELD, $value);
}
else if (in_array($field_name, $authorized_text_fields) && empty($value))
$this->context->cart->deleteCustomizationToProduct((int)$this->product->id, $indexes[$field_name]);
获取定制
$texts = $this->context->cart->getProductCustomization($this->product->id, Product::CUSTOMIZE_TEXTFIELD, true);
$text_fields = array();
foreach ($texts as $text_field)
$text_fields['textFields_'.$this->product->id.'_'.$text_field['index']] = str_replace('<br />', "\n", $text_field['value']);
关于php - Prestashop:将定制产品添加到购物车,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24610116/
我想使用位于 prestashop 文件夹外但仍在同一服务器上的 php 脚本 (external_script.php) 中的 prestashop 应用程序。 我可以使用 Magento 做到这一
我是 PrestaShop 的新手。我遇到了一个问题,无法在 PrestaShop 从库存中减去商品的代码中找到。 当客户创建订单并选择付款时,商品将从库存中减去,但如果客户不付款并返回,则商品不会退
我正在开发一个必须列出现有产品列表的 prestashop 模块。 对于模块的配置面板,使用 renderForm() 和 getContent(),我试图复制“附件”功能,从这里开始编写输入产品的一
Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题
没有模块安装线路UPS,但仍然出现错误。 错误: **发现错误:CData 部分未完成 UPS 模块可以通过 must_have_module_list.xml 文件中的 UPS Ge 处理运输。 发
我创建了一个名为“blockallproducts”的模块,它也在主页和分页中显示所有产品。但是如何将 paginaton 页面值的值传递给模块?或者我需要再创建一个 Controller 吗?任何人
这是我的代码。文件 mymodule.php: class Mymodule extends Module { public function __construct() {
我正在为 prestashop 开发一个非常简单的(对于新手用户)后端,我想知道在哪里可以找到上传的产品图片名称.. 我知道它们在“img/p”目录中。但我不知道: 1.它们在哪个数据库表中..链接
我试图在 prestashop 中有一个静态页面作为主页。我能想到的唯一方法是创建一个新页面(即shop.php),然后将主页中当前 Hook 的模型 Hook 到新的shop.php。 我试着关注这
function get_user_id() { global $cookie; $userid = NULL; if (isset($cookie->id_customer)
我已将我的 prestashop 1.5.6 电子商务站点迁移到新服务器, 我所做的过程只是将文件上传到新服务器并导入数据库。 我清理了 Cache/smarty/compile 和 Cache/sm
我想在 prestashop 模块中显示一个表单,并想将该值存储在数据库中。这怎么可能??有prestashop专家吗?? 最佳答案 您可以使用自定义 HTML block 并在其中添加您的表单代码。
我想更改订单确认电子邮件模板的内容,前提是已订购了特定产品。有什么解决办法吗? 最佳答案 您可以在mails/language/order_conf.(html/txt)中找到电子邮件订单确认的通用模
我想在 prestashop 模块中显示一个表单,并想将该值存储在数据库中。这怎么可能??有prestashop专家吗?? 最佳答案 您可以使用自定义 HTML block 并在其中添加您的表单代码。
我正在尝试从模块中获取管理员 url 和管理员目录。 你能举个例子,从一个模块 php 页面中找到 admin url 和 admin dir 吗? getAdminLink('AdminTest',
我使用以下代码尝试在 prestashop 中获取当前用户 ID。 我将此代码放在我的模块目录中的另一个 php 文件中,并通过模块文件调用它。 $id = $this->context->cust
Prestashop 我遇到了一个关于 cookie 的问题。在 prestashop 1.4.7 中,我使用 setcookie 创建了一个自定义 cookie 变量,但是当我尝试在前端 Contr
我是 prestashop 的新手。 2 天前,我在我的本地主机上安装了 prestashop Version 1.6.1.6。但现在我忘记了它的管理面板 URL。有什么办法可以找出网址。任何人都请帮
是否可以在不直接注入(inject)模板 smarty 的情况下将 javascript 集成到模块中? 最佳答案 已解决, 我在我的模块目录中添加了一个 Js 文件(例如:mymodule/view
我正在尝试从 prestashop 获取当前的购物车 ID: $cookie->id_cart; 但在我将产品添加到购物车之前,它是空白的。 是否有任何选项可以创建该购物车以便我获取 ID? 谢谢。
我是一名优秀的程序员,十分优秀!