Sign in to follow this  
Followers 0
Frocenter

Расчёты на странице Wordpress

13 posts in this topic

Здравствуйте ребята, я давно хотел размещать на страницах своего сайта различные расчётные программы и сервисы, но как мы все знаем, стандартными средствами Wordpress этого сделать невозможно (код не работает на странице записи), для решения этой проблемы пересмотрел весь интернет, кроме плагинов калькуляторов ничего стоящего не нашёл, пробовал переделывать их методом тыка, ерунда получалась. Но примерно месяц назад начал самостоятельно изучать PHP, благо литературу и видео мне здесь добрые люди подсказали, спасибо им огромное, оказалось PHP это просто супер, то что мне было нужно !

Теперь я смотрю на Wordpress совершенно по другому и самостоятельно решил проблему с выводом практически любого кода на странице записи, чем и хочу с Вами поделиться.

 

Первое что нужно сделать, вставить следующий код в шаблон страницы, отвечающий за вывод записей :

<?php
if ($_POST){
	$idd = strip_tags ($_POST ['form-id']);
	if ($idd > 0 && $idd < 100){
		include "service-a.php";
	}
	elseif ($idd > 99 && $idd < 200){
		include "service-b.php";
	}
	elseif ($idd > 199 && $idd < 300){
		include "service-c.php";
	}
	else {
		unset ($_POST);
	}
}
?>

Эта конструкция проверяет был ли метод POST, если был, подключает к странице записи файл обработчик, тут я конечно решил сразу код масштабировать на будущее, если будет много расчётов, в зависимости от значения form-id (указываем в <input type="hidden" name="form-id" value="1">) отправляемой формы, подключается нужный файл, это позволяет не писать все расчёты в один обработчик, а равномерно распределить их по множеству файлов.

Далее, в папке с темой создаём файлы: service-a.php service-b.php service-c.php, следующего содержания:

<?php
$idform = strip_tags ($_POST["form-id"]);
switch ($idform){
	case 1:
	// Здесь исполняется код для формы с form-id равной 1 и выводятся результаты вычислений.
	break;
	case 2:
	// Здесь исполняется код для формы с form-id равной 2 и выводятся результаты вычислений.
	break;
	case 3:
	// Здесь исполняется код для формы с form-id равной 3 и выводятся результаты вычислений.
	break;
	default: unset ($_POST);
}
?>

Теперь в любую запись Вашего сайта можно вставить форму с расчётами, после нажатия кнопки отправки запроса страница вычислит результаты и выведет их на экран, в том месте где установлен первый код. Все оформляется красиво стилями, и работает безотказно. Ребята, хочу посоветоваться с Вами, правильно ли я всё делаю, или что-то не так ? Подскажите пожалуйста, и не ругайте сильно, это так сказать мой дебют в роли программиста...

Share this post


Link to post
Share on other sites

Для таких дел лучше всё-таки писать плагин, его и править легче будет и вставлять в различные места тоже проще.

if ($_POST){

Здесь проверяется существует ли POST, однако не уточняется его содержание. Разумней заменить на

if ($_POST['form-id']){

Далее сложно сказать, не видя хотя бы сам калькулятор, но if в данном случае будет работать быстрее switch.

Share this post


Link to post
Share on other sites

Я сделал так

if ($_POST){

чтобы страницы без форм даже не смотрели что там находится в form-id а пролетали мимо...

А по поводу switch, я подумал что IF вычислять практически нечего, там всего одна переменная с разными значениями, хватит и switch.

Share this post


Link to post
Share on other sites

Здравствуйте ребята, я давно хотел размещать на страницах своего сайта различные расчётные программы и сервисы, но как мы все знаем, стандартными средствами Wordpress этого сделать невозможно (код не работает на странице записи), для решения этой проблемы пересмотрел весь интернет, кроме плагинов калькуляторов ничего стоящего не нашёл, пробовал переделывать их методом тыка, ерунда получалась. Но примерно месяц назад начал самостоятельно изучать PHP, благо литературу и видео мне здесь добрые люди подсказали, спасибо им огромное, оказалось PHP это просто супер, то что мне было нужно !

 

Теперь я смотрю на Wordpress совершенно по другому и самостоятельно решил проблему с выводом практически любого кода на странице записи, чем и хочу с Вами поделиться.

 

Первое что нужно сделать, вставить следующий код в шаблон страницы, отвечающий за вывод записей :

<?php
if ($_POST){
	$idd = strip_tags ($_POST ['form-id']);
	if ($idd > 0 && $idd < 100){
		include "service-a.php";
	}
	elseif ($idd > 99 && $idd < 200){
		include "service-b.php";
	}
	elseif ($idd > 199 && $idd < 300){
		include "service-c.php";
	}
	else {
		unset ($_POST);
	}
}
?>

Эта конструкция проверяет был ли метод POST, если был, подключает к странице записи файл обработчик, тут я конечно решил сразу код масштабировать на будущее, если будет много расчётов, в зависимости от значения form-id (указываем в <input type="hidden" name="form-id" value="1">) отправляемой формы, подключается нужный файл, это позволяет не писать все расчёты в один обработчик, а равномерно распределить их по множеству файлов.

 

Далее, в папке с темой создаём файлы: service-a.php service-b.php service-c.php, следующего содержания:

<?php
$idform = strip_tags ($_POST["form-id"]);
switch ($idform){
	case 1:
	// Здесь исполняется код для формы с form-id равной 1 и выводятся результаты вычислений.
	break;
	case 2:
	// Здесь исполняется код для формы с form-id равной 2 и выводятся результаты вычислений.
	break;
	case 3:
	// Здесь исполняется код для формы с form-id равной 3 и выводятся результаты вычислений.
	break;
	default: unset ($_POST);
}
?>

Теперь в любую запись Вашего сайта можно вставить форму с расчётами, после нажатия кнопки отправки запроса страница вычислит результаты и выведет их на экран, в том месте где установлен первый код. Все оформляется красиво стилями, и работает безотказно. Ребята, хочу посоветоваться с Вами, правильно ли я всё делаю, или что-то не так ? Подскажите пожалуйста, и не ругайте сильно, это так сказать мой дебют в роли программиста...

А теперь ты поделись литературой и видео по которым учился) 

Share this post


Link to post
Share on other sites

Но ведь не все вокруг вашего калькулятора будет вертеться, POST может содержать и другие данные, следовательно, он успешно пройдет это условие и

1. Бессмысленное дальнейшее выполнение кода внутри этого блока;

2. Здесь весь POST разрушится

unset ($_POST); 

и остальные данные ниже не попадут, что может вызвать некорректную работу сайта.

Share this post


Link to post
Share on other sites

LetSevI, вы наверное не увидели, эту строчку - "// Здесь исполняется код для формы с form-id равной 1 и выводятся результаты вычислений".

А по поводу

unset ($_POST);

нужно подумать, спасибо !

Share this post


Link to post
Share on other sites

А теперь ты поделись литературой и видео по которым учился) 

Книги не читал, только официальную справку https://php.net/download-docs.php, + видео.

Share this post


Link to post
Share on other sites

LetSevI, вы наверное не увидели, эту строчку - "// Здесь исполняется код для формы с form-id равной 1 и выводятся результаты вычислений".

Посмотрите call_user_func_array, может это покажется Вам красивее:

function form_1(){
    // Здесь исполняется код для формы с form-id равной 1 и выводятся результаты вычислений.
}

function form_2(){
    // Здесь исполняется код для формы с form-id равной 2 и выводятся результаты вычислений.
}

function form_3(){
    // Здесь исполняется код для формы с form-id равной 3 и выводятся результаты вычислений.
}

И вызов в одну строчку, без условий:

call_user_func_array('form_'.$_POST['form-id']);
Frocenter likes this

Share this post


Link to post
Share on other sites

Но ведь не все вокруг вашего калькулятора будет вертеться, POST может содержать и другие данные, следовательно, он успешно пройдет это условие и

1. Бессмысленное дальнейшее выполнение кода внутри этого блока;

2. Здесь весь POST разрушится

unset ($_POST); 

и остальные данные ниже не попадут, что может вызвать некорректную работу сайта.

LetSevI, я забыл уточнить, что форма в этом примере отправляет данные на ту же страницу на которой и размещена, а другие плагины с формами, форма комментариев и разные виджеты обычно отправляют свои POSTы на свои собственные обработчики, так что разрушение POST не страшно. Я привык подстраховываться и фильтровать все приходящие из вне данные по соображениям безопасности.

Share this post


Link to post
Share on other sites

LetSevI, подскажите пожалуйста, как лучше и надёжнее и правильнее

<form action="" method="post">

или

<form action="Адрес этой же страницы" method="post">

Share this post


Link to post
Share on other sites

 

LetSevI, подскажите пожалуйста, как лучше и надёжнее и правильнее

<form action="" method="post">

или

<form action="Адрес этой же страницы" method="post">

Пустой action означает, что по умолчанию будет использоваться текущая страница, но валидатор W3C это не одобрит. Больше различий нет.

Frocenter likes this

Share this post


Link to post
Share on other sites

Для себя вывел лучший (на мой взгляд) вариант. Делаем шорткод с кодом формы. По клику по кнопке (рассчитать или как она у Вас называется) идет AJAX запрос, который возвращает ответ.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.