PHP创建类以序列化字段值

时间:2018-12-18 18:46:42

标签: php class serialization

因此,我现在已经掌握了PHP的基础知识,并且我正在编写一个扩展Woocommerce的插件。 我已经在产品设置中添加了自定义标签,并且在标签内可以添加与产品相关的动态数量的自定义费用。本质上,我使用JQuery创建一个内部包含4个select元素的div。我可以添加任意数量的div元素(因此,该产品可以任意数量的自定义费用)。 我找到了一种方法来执行此操作,但我相信必须有更好的方法(当前,我使用“计数器”变量并给每个div并选择一个数字后缀)。 我说更好的方法,因为当我删除div(因此删除“自定义费用”)时,我发现我必须重新编号所有现有的div并选择元素(否则,我的update_post_meta保存过程将失败。

这是我当前保存数据的方式:

//Additional Charge Types
$i = $_POST['count_of_charge_types']; <-this is a hidden field
$counter = 1;
if ($i>0){
    while($counter <= $i){
        $add_charge_sub = array("Description" => 
esc_attr($_POST['_add_charge_desc_'. $counter]),"Charge_Type" => 
esc_attr($_POST['_add_charge_type_'. $counter]),"Charge_Value" => 
esc_attr($_POST['_add_charge_value_'. $counter]),"Charge_Method" => 
esc_attr($_POST['_add_charge_method_'. $counter]));
        $add_charges[]=$add_charge_sub;
        $counter++;
};

update_post_meta($post_id,'_product_add_charges',$add_charges);

这是HTML的示例,因此您可以了解元素的命名以及如何保存元素:

<div id="add_charges_1" class="options_group">

<div id="add_charges_header_1" class="desc_header">
   <button id="but_remove_charge_type_1" type="button">Remove Charge Type</button>

  <input type="text" class="short" style="" name="_add_charge_desc_1" 
  id="_add_charge_desc_1" value="Fuel Surcharge"> 
</div>

<input type="text" class="short" style="" name="_add_charge_value_1" id="_add_charge_value_1" value="4"> 

<select id="_add_charge_method_1" name="_add_charge_method_1">
            <option value="unit" selected="selected">Per Unit</option>
            <option value="group">Per Product Group</option>        
</select>

</div>

它可以正常工作,但是正如我说的,当我删除“自定义费用”时,元素编号可能会留有空白,这会导致循环失败。

任何人都可以为我指明如何生成元素的正确方向,这样我就可以取消编号系统并只需对字段进行序列化。

我已经阅读了有关PHP序列化here的内容,其中涉及创建类。创建课程对我来说是新手,我也不知道从哪里开始以及它是否是正确和最简单的方法。

我查看类的原因是因为正如您从update_post_meta代码中看到的那样,我正在创建数组并将其存储在DB中。我不能只使用foreach($ _ POST as $ name => $ value)循环遍历表单中的每个项目,因为我需要保持在一起的选项。

尽管如此,我还有另一个动机来解决这个问题,这是因为该网站的下一阶段开发将涉及创建许多自定义选项,并且我想使开发快速高效。

0 个答案:

没有答案