Сообщение #7 dabustard » 15.04.2019, 14:03
korshunov писал(а):Оно вроде бы и не сильно сложно.
Вот тут похожий вопрос рассматривался, методы можно почерпнуть:
И снова Вы правы :) Благодарю в очередной раз!
Опишу здесь, возможно кому-то пригодится:
1) В phpMyAdmin выполняем запрос к БД, добавляющий новое поле
view в таблицу
orders (не забудьте заменить prefix на префикс таблиц в вашей БД) :
Код: Выделить всё
ALTER TABLE `prefix_orders` ADD `views` INT(11) NOT NULL DEFAULT '0' AFTER `lang_id`;
2) в файле
/api/Orders.php, в функции
get_order добавляем запрос нового поля
views:
то есть меняем это:
Код: Выделить всё
$query = $this->db->placehold("SELECT
o.id,
o.delivery_id,
o.delivery_price,
o.separate_delivery,
o.payment_method_id,
o.paid,
o.payment_date,
o.closed,
o.discount,
o.coupon_code,
o.coupon_discount,
o.date,
o.user_id,
o.name,
o.address,
o.phone,
o.email,
o.comment,
o.status_id,
o.url,
o.total_price,
o.note,
o.ip,
o.lang_id
на это:
Код: Выделить всё
$query = $this->db->placehold("SELECT
o.id,
o.delivery_id,
o.delivery_price,
o.separate_delivery,
o.payment_method_id,
o.paid,
o.payment_date,
o.closed,
o.discount,
o.coupon_code,
o.coupon_discount,
o.date,
o.user_id,
o.name,
o.address,
o.phone,
o.email,
o.comment,
o.status_id,
o.url,
o.total_price,
o.note,
o.ip,
o.lang_id,
o.views
3) в этом же файле (
/api/Orders.php), в самом конце добавляем новую функцию
update_oviews:
Код: Выделить всё
/*Обновление кол-ва просмотров заказа*/
public function update_oviews($id)
{
$this->db->query("UPDATE __orders SET views=views+1 WHERE id=?", $id);
return true;
}
4) в файле
/view/OrderView.php, функцию
fetch_order дополняем двумя строками:
Код: Выделить всё
/*Отображение оформленного заказа*/
public function fetch_order() {
if($url = $this->request->get('url', 'string')) {
$order = $this->orders->get_order((string)$url);
$this->orders->update_oviews(intval($order->id));//просмотры заказа +1
} elseif(!empty($_SESSION['order_id'])) {
$order = $this->orders->get_order(intval($_SESSION['order_id']));
$this->orders->update_oviews(intval($_SESSION['order_id']));//просмотры заказа +1
} else {
return false;
}
5) Ну и, наконец, в шаблоне вывода информации о заказе добавляем сам тег Google Analitics, обернутый условием:
Код: Выделить всё
{if $order->views <1}
{literal}
<script>
gtag('event', 'purchase', {
'transaction_id': '{/literal}{$order->id}{literal}',
'value': {/literal}{$order->total_price}{literal},
'items': [
{/literal}{foreach $purchases as $purchase}{literal}
{
'id': '{/literal}{$purchase->variant->id}{literal}',
'name': '{/literal}{$purchase->product_name|escape}{literal}',
'variant': '{/literal}{$purchase->variant_name|escape}{literal}',
'quantity': {/literal}{$purchase->amount|escape}{literal},
'price': '{/literal}{$purchase->variant->price}{literal}'
},
{/literal}{/foreach}{literal}
]
});
</script>
{/literal}
{/if}
[quote="korshunov"]Оно вроде бы и не сильно сложно.
Вот тут похожий вопрос рассматривался, методы можно почерпнуть:[/quote]
И снова Вы правы :) Благодарю в очередной раз!
Опишу здесь, возможно кому-то пригодится:
1) В phpMyAdmin выполняем запрос к БД, добавляющий новое поле [b]view [/b]в таблицу [b]orders[/b] (не забудьте заменить prefix на префикс таблиц в вашей БД) :
[code]
ALTER TABLE `prefix_orders` ADD `views` INT(11) NOT NULL DEFAULT '0' AFTER `lang_id`;
[/code]
2) в файле [b]/api/Orders.php[/b], в функции [b]get_order[/b] добавляем запрос нового поля [b]views[/b]:
то есть меняем это:
[code]
$query = $this->db->placehold("SELECT
o.id,
o.delivery_id,
o.delivery_price,
o.separate_delivery,
o.payment_method_id,
o.paid,
o.payment_date,
o.closed,
o.discount,
o.coupon_code,
o.coupon_discount,
o.date,
o.user_id,
o.name,
o.address,
o.phone,
o.email,
o.comment,
o.status_id,
o.url,
o.total_price,
o.note,
o.ip,
o.lang_id
[/code]
на это:
[code]
$query = $this->db->placehold("SELECT
o.id,
o.delivery_id,
o.delivery_price,
o.separate_delivery,
o.payment_method_id,
o.paid,
o.payment_date,
o.closed,
o.discount,
o.coupon_code,
o.coupon_discount,
o.date,
o.user_id,
o.name,
o.address,
o.phone,
o.email,
o.comment,
o.status_id,
o.url,
o.total_price,
o.note,
o.ip,
o.lang_id,
o.views
[/code]
3) в этом же файле ([b]/api/Orders.php[/b]), в самом конце добавляем новую функцию [b]update_oviews[/b]:
[code]
/*Обновление кол-ва просмотров заказа*/
public function update_oviews($id)
{
$this->db->query("UPDATE __orders SET views=views+1 WHERE id=?", $id);
return true;
}
[/code]
4) в файле [b]/view/OrderView.php[/b], функцию [b]fetch_order[/b] дополняем двумя строками:
[code]
/*Отображение оформленного заказа*/
public function fetch_order() {
if($url = $this->request->get('url', 'string')) {
$order = $this->orders->get_order((string)$url);
$this->orders->update_oviews(intval($order->id));//просмотры заказа +1
} elseif(!empty($_SESSION['order_id'])) {
$order = $this->orders->get_order(intval($_SESSION['order_id']));
$this->orders->update_oviews(intval($_SESSION['order_id']));//просмотры заказа +1
} else {
return false;
}
[/code]
5) Ну и, наконец, в шаблоне вывода информации о заказе добавляем сам тег Google Analitics, обернутый условием:
[code]
{if $order->views <1}
{literal}
<script>
gtag('event', 'purchase', {
'transaction_id': '{/literal}{$order->id}{literal}',
'value': {/literal}{$order->total_price}{literal},
'items': [
{/literal}{foreach $purchases as $purchase}{literal}
{
'id': '{/literal}{$purchase->variant->id}{literal}',
'name': '{/literal}{$purchase->product_name|escape}{literal}',
'variant': '{/literal}{$purchase->variant_name|escape}{literal}',
'quantity': {/literal}{$purchase->amount|escape}{literal},
'price': '{/literal}{$purchase->variant->price}{literal}'
},
{/literal}{/foreach}{literal}
]
});
</script>
{/literal}
{/if}
[/code]