Friday, 23 August 2013

PHP Function that Counts String Length and Charges Price Based on # of Characters

PHP Function that Counts String Length and Charges Price Based on # of
Characters

I've got an OpenCart VQMod that currently counts string length and charges
by character. This is close, but I need it to charge with the following
rules:
30-45 characters: $8.50
46+ characters: $12.00
Can anyone help me modify the following PHP?
<file name="admin/controller/catalog/option.php">
<operation>
<search position="after"><![CDATA[
public function index() {
]]></search>
<add><![CDATA[
//Q: Option Price By Character
$query = $this->db->query("DESC `".DB_PREFIX."option`
price_per_char");
if (!$query->num_rows) {
$this->db->query("ALTER TABLE `" . DB_PREFIX . "option` ADD
`price_per_char` DECIMAL(15,4)");
}
]]></add>
</operation>
<operation>
<search position="before"><![CDATA[
if (isset($this->request->post['sort_order'])) {
]]></search>
<add><![CDATA[
//Q: Option Price By Character
if (isset($this->request->post['price_per_char'])) {
$this->data['price_per_char'] =
$this->request->post['price_per_char'];
} elseif (!empty($option_info)) {
$this->data['price_per_char'] = $option_info['price_per_char'];
} else {
$this->data['price_per_char'] = '';
}
]]></add>
</operation>
</file>
<file name="admin/view/template/catalog/option_form.tpl">
<operation>
<search position="before" index="1"><![CDATA[
</table>
]]></search>
<add><![CDATA[
<tr>
<td>Price Per Char:<br/><span class="help">For 'Text' and
'Textarea' types only</span></td>
<td><input type="text" name="price_per_char" value="<?php echo
(isset($price_per_char)) ? $price_per_char : '' ?>" size="3"
/></td>
</tr>
]]></add>
</operation>
</file>
<file name="admin/model/catalog/option.php">
<operation><!-- matches twice -->
<search position="replace"><![CDATA[
sort_order = '" . (int)$data['sort_order'] . "'
]]></search>
<add><![CDATA[
sort_order = '" . (int)$data['sort_order'] . "', price_per_char =
'" . (float)$data['price_per_char'] . "'
]]></add>
</operation>
</file>
<file name="catalog/model/catalog/product.php">
<operation>
<search position="after" index="2"><![CDATA[
$product_option_data[] = array(
]]></search>
<add><![CDATA[
'price_per_char' => $product_option['price_per_char'],
]]></add>
</operation>
</file>
<file name="catalog/controller/product/product.php">
<operation>
<search position="after" index="2"><![CDATA[
$this->data['options'][] = array(
]]></search>
<add><![CDATA[
'price_per_char' => $option['price_per_char'],
]]></add>
</operation>
</file>
<file name="catalog/view/theme/*/template/product/product.tpl">
<operation>
<search position="replace"><![CDATA[
<input type="text" name="option[<?php echo
$option['product_option_id']; ?>]" value="<?php echo
$option['option_value']; ?>" />
]]></search>
<add><![CDATA[
<input type="text" name="option[<?php echo
$option['product_option_id']; ?>]" value="<?php echo
$option['option_value']; ?>" price_per_char="<?php echo
$option['price_per_char']; ?>" onkeyup="$('.pbctotal<?php echo
$option['product_option_id']; ?>').remove(); var pbcval =
(this.value.length * <?php echo
$this->currency->format($option['price_per_char'], false, false,
false); ?>); if (pbcval > 0) { $(this).after(' <span
class=\'pbctotal<?php echo $option['product_option_id'];
?>\'>+'+parseFloat(pbcval).toFixed(2)+'</span>'); }" />
]]></add>
</operation>
<operation>
<search position="replace"><![CDATA[
<textarea name="option[<?php echo $option['product_option_id'];
?>]" cols="40" rows="5"><?php echo $option['option_value'];
?></textarea>
]]></search>
<add><![CDATA[
<textarea name="option[<?php echo $option['product_option_id'];
?>]" cols="40" rows="5" price_per_char="<?php echo
$option['price_per_char']; ?>" onkeyup="$('.pbctotal<?php echo
$option['product_option_id']; ?>').remove(); var pbcval =
(this.value.length * <?php echo
$this->currency->format($option['price_per_char'], false, false,
false); ?>); if (pbcval > 0) { $(this).after(' <span
class=\'pbctotal<?php echo $option['product_option_id'];
?>\'>+'+parseFloat(pbcval).toFixed(2)+'</span>'); }"><?php echo
$option['option_value']; ?></textarea>
]]></add>
</operation>
</file>
<file name="system/library/cart.php">
<operation>
<search position="after"><![CDATA[
$option_query =
]]></search>
<add><![CDATA[
//Q: Option Price By Character
$option_query = $this->db->query("SELECT * FROM " .
DB_PREFIX . "product_option po LEFT JOIN `" . DB_PREFIX .
"option` o ON (po.option_id = o.option_id) LEFT JOIN " .
DB_PREFIX . "option_description od ON (o.option_id =
od.option_id) WHERE po.product_option_id = '" .
(int)$product_option_id . "' AND po.product_id = '" .
(int)$product_id . "' AND od.language_id = '" .
(int)$this->config->get('config_language_id') . "'");
]]></add>
</operation>
<operation>
<search position="after"><![CDATA[
$option_query->row['type'] == 'text' || $option_query->row['type']
== 'textarea'
]]></search>
<add><![CDATA[
//Q: Option Price By Character
$optprice = '';
$optprefix = '';
if ($option_query->row['type'] == 'text' ||
$option_query->row['type'] == 'textarea') {
if (strlen($option_value)) {
$optprice = (strlen($option_value) *
$option_query->row['price_per_char']);
$optprefix = '+';
$option_price += $optprice;
}
}
]]></add>
</operation>
<operation>
<search position="replace"><![CDATA[
'price' => '',
]]></search>
<add trim="true"><![CDATA[
'price' => $optprice,
]]></add>
</operation>
<operation>
<search position="replace"><![CDATA[
'price_prefix' => '',
]]></search>
<add trim="true"><![CDATA[
'price_prefix' => $optprefix,
]]></add>
</operation>
</file>

No comments:

Post a Comment