Добавление полей в корзине Simpla CMS

в 13:58, , рубрики: cms, метки: ,

Не так давно начал работать с CMS Simpla, документации по ней особо нет, но есть форум, в котором тоже нет ответов на многие вопросы. На некоторые вопросы есть ответы, но не полные. Собственно в этой статье я хочу написать пошаговую инструкцию «Как добавлять новые поля в корзину заказа».

Шаг 1 (заведение новых полей в форму):

— открываем файл design/имя_вашего_шаблона/html/cart.tpl
— находим подобный код, после которого вы хотите добавить новые поля:

	<label>Телефон*</label>
	<input name="phone" type="text" value="{$phone|escape}" />

— заводим новые поля по аналогии:

	<label>Новое поле*</label>
	<input name="new-field" type="text" value="{$new-field|escape}" />

Шаг 2 (заведение новых полей в письмо):

— открываем файл design/имя_вашего_шаблона/html/email_order.tpl
— находим подобный код, после которого вы хотите добавить новые поля:

	{if $order->phone}
	<tr>
		<td style="padding:6px; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
			Телефон
		</td>
		<td style="padding:6px; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
			{$order->phone|escape}
		</td>
	</tr>
	{/if}

— заводим новые поля по аналогии:

	{if $order->new-field}
	<tr>
		<td style="padding:6px; background-color:#f0f0f0; border:1px solid #e0e0e0;font-family:arial;">
			Новое поле
		</td>
		<td style="padding:6px; background-color:#ffffff; border:1px solid #e0e0e0;font-family:arial;">
			{$order->new-field|escape}
		</td>
	</tr>
	{/if}

Шаг 3 (заведение новых полей в форму ответа, после отправки):

— открываем файл design/имя_вашего_шаблона/html/order.tpl
— находим подобный код:

	{if $order->phone}
	<tr>
		<td>
			Телефон
		</td>
		<td>
			{$order->phone|escape}
		</td>
	</tr>
	{/if}

— заводим новые поля по аналогии:

	{if $order->new-field}
	<tr>
		<td>
			Новое поле
		</td>
		<td>
			{$order->new-field|escape}
		</td>
	</tr>
	{/if}

Шаг 4 (заведение новых полей в админку):

— открываем файл /simpla/design/html/order.tpl
— находим подобный код, после которого вы хотите добавить новые поля:

		<li>
			<label class=property>Телефон</label>
			<div class="edit_order_detail" style='display:none;'>
				<input name="phone" class="simpla_inp " type="text" value="{$order->phone|escape}" />
			</div>
			<div class="view_order_detail">
				{if $order->phone}
				<span class="ip_call" data-phone="{$order->phone|escape}" target="_blank">{$order->phone|escape}</span>{else}{$order->phone|escape}{/if}
			</div>
		</li>

— заводим новые поля по аналогии:

		<li>
			<label class=property>Новое поле</label>
			<div class="edit_order_detail" style='display:none;'>
				<input name="new-field" class="simpla_inp " type="text" value="{$order->new-field|escape}" />
			</div>
			<div class="view_order_detail">
				{if $order->new-field}
				<span class="ip_call" data-new-field="{$order->new-field|escape}" target="_blank">{$order->new-field|escape}</span>{else}{$order->new-field|escape}{/if}
			</div>
		</li>

Шаг 5 (заведение новых полей в скрипты сайта):

— открываем файл simpla/OrderAdmin.php
— находим подобный код:

		if($this->request->method('post'))
		{
			$order->id = $this->request->post('id', 'integer');
			$order->name = $this->request->post('name');
			$order->email = $this->request->post('email');
			$order->phone = $this->request->post('phone');
			$order->address = $this->request->post('address');

— заводим новые поля:

			$order->new-field = $this->request->post('new-field');

— далее по файлу находим:

		// Если новый заказ и передали get параметры
		if(empty($order->id))
		{
			$order = new stdClass;
			if(empty($order->phone))
				$order->phone = $this->request->get('phone', 'string');
			if(empty($order->name))
				$order->name = $this->request->get('name', 'string');
			if(empty($order->address))
				$order->address = $this->request->get('address', 'string');

— добавляем:

			if(empty($order->new-field))
				$order->new-field= $this->request->get('new-field', 'string');

— дальше открываем файл viewCartView.php
— находим:

    if(isset($_POST['checkout']))
    {
    	$order = new stdClass;
    	$order->delivery_id = $this->request->post('delivery_id', 'integer');
    	$order->name        = $this->request->post('name');
    	$order->email        = $this->request->post('email');
    	$order->address     = $this->request->post('address');

— добавляем:

    	$order->new-field = $this->request->post('new-field');

— дальше по файлу находим:

		$this->design->assign('delivery_id', $order->delivery_id);
		$this->design->assign('name', $order->name);
		$this->design->assign('email', $order->email);
		$this->design->assign('phone', $order->phone);
		$this->design->assign('address', $order->address);

— добавляем:

		$this->design->assign('new-field', $order->new-field);

— дальше по файлу находим:

		// Данные пользователя
		if($this->user)
		{
			$last_order = $this->orders->get_orders(array('user_id'=>$this->user->id, 'limit'=>1));
			$last_order = reset($last_order);
			if($last_order)
			{
				$this->design->assign('name', $last_order->name);
				$this->design->assign('email', $last_order->email);
				$this->design->assign('phone', $last_order->phone);
				$this->design->assign('address', $last_order->address);

— добавляем:

		$this->design->assign('new-field', $last_order->new-field);

— потом открываем файл api/Orders.php
— находим:

	public function get_order($id)
	{
		if(is_int($id))
			$where = $this->db->placehold(' WHERE o.id=? ', intval($id));
		else
			$where = $this->db->placehold(' WHERE o.url=? ', $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.address, o.new-field

— дальше по файлу находим подобную запись:

		// Выбираем заказы
		$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.address, o.new-field

Шаг 6 (заведение новых полей в Базу Данных):

Для этого вам нужно пройти в phpMyAdmin и добавить ваши новые поля в таблицу s_orders.

Вот и всё, надеюсь данная статья будет полезной для вас!

Автор: ювелир

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js