<?php
#Подключение JS
function my_enqueue_js() {
#Скрипт с обработчиком код скрипта ниже
wp_enqueue_script( 'my-ajax', get_template_directory_uri() . '/assets/js/my-ajax.js', array('jquery'), '1.0.0', true );
#Отпрака переменных в скрипт
wp_localize_script( 'my-ajax', 'MyAjax', array(
'ajax_url' => admin_url( 'admin-ajax.php' ),
'security' => wp_create_nonce( 'my-security-string' )
));
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_js' );
#Обработчик
function my_action_callback() {
check_ajax_referer( 'my-security-string', 'security' );
$int = intval( $_POST['int'] );
$int += 10;
echo $int;
wp_die();
}
#Добавление обработчика
# вешается на wp_ajax_{имя_экшена}
# имя экшена должно совпадать с тем, которое задано в js
add_action( 'wp_ajax_my_action', 'my_action_callback' );
#не забываем про nopriv для неавторизованных юзерей
add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );
jQuery(document).ready(function($) {
var $data = {
action: 'my_action',
security : MyAjax.security,
int: 1234
};
$.post(MyAjax.ajax_url, $data, function($response) {
alert('1234 + 10 = ' + $response);
});
});
sudo apt-get install tasksel
sudo apt-get install -f
sudo tasksel
sudo apt-get install phpmyadmin
в каком месте нужно закрывать соединение с БД?
В каждом методе?
// Не давайте общие имена конкретным реализациям
// Почитайте, проникнитесь и используйте PSR-2 и PSR-4
class DataBase
{
private $mysqli;
private $dbConfig;
public function __construct()
{
// Класс по работе с БД не должен знать даже о существовании неких файлов, где-то там. Это не его забота.
// Передавайте в конструктор готовое подключение к БД, если нужно.
$this->dbConfig = require "db/database_config.php";
// Вот никак понять не могу, за что так любят этот mysqli, ну что в нем прям такого раз такого, по сравнению с PDO?
$this->mysqli = mysqli_connect($this->dbConfig['host'], $this->dbConfig['username'], $this->dbConfig['password'], $this->dbConfig['db_name']);
// Почему вдруг класс по работе с БД занимается операцией вывода?
// Если что-то не так - бросайте исключение, ни каких echo, die, exit, trigger_error
if (mysqli_connect_errno($this->mysqli)) {
echo "Не удалось подключиться к MySQL: " . mysqli_connect_error();
}
}
// Вы не проверяете аргументы, это плохо, очень.
// Что бы нагнуть ваш проект достаточно передать в любой из аргументов: '1; DROP TABLE employees;'
public function getEmployees($where='1',$start, $perPage){
// ЗАБУДЬТЕ про подстановку данных через конкатенацию, используйте плейсхолдеры
// http://php.net/manual/ru/pdo.prepared-statements.php
$sql="SELECT e.name,e.birthday,d.title_dep,p.title_pos,t.title_type,e.salary FROM `employees` AS e INNER JOIN departments AS d ON e.id_dep=d.id
INNER JOIN positions AS p ON e.id_pos=p.id
INNER JOIN payment_types AS t ON e.id_type=t.id where $where LIMIT $start,$perPage";
// Вам ни переменная $res, ни $row не нужны
$res = $this->mysqli->query($sql);
$row=$res->fetch_all(MYSQLI_ASSOC);
return $row;
}
}
$this->redactpost($id);
{% for user in users %}
{{ user.username|e }}
{% endfor %}
var_dump($a);
# кеширование в браузере на стороне пользователя
<IfModule mod_expires.c>
#Включаем поддержку директивы Expires
ExpiresActive On
# Задаем время для хранения файлов (картинок) в кэше для каждого типа
ExpiresDefault "access 7 days"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType text/javascript "access plus 1 year"
ExpiresByType text/css "access plus 1 year"
ExpiresByType text/html "access plus 7 day"
ExpiresByType text/x-javascript "access 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/x-icon "access 1 year"
ExpiresByType application/x-shockwave-flash "access 1 year"
</IfModule>
# Cache-Control
<ifModule mod_headers.c>
# Задаем 30 дней для данного типа файла
<filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=2592000, public"
</filesMatch>
# Задаем 30 дней для данного типа файла
<filesMatch "\.(css|js)$">
Header set Cache-Control "max-age=2592000, public"
</filesMatch>
# Задаем 2 дня для данного типа файла
<filesMatch "\.(xml|txt)$">
Header set Cache-Control "max-age=172800, public, must-revalidate"
</filesMatch>
# Задаем 1 день для данного типа файла
<filesMatch "\.(html|htm|php)$">
Header set Cache-Control "max-age=172800, private, must-revalidate"
</filesMatch>
</ifModule>
# использование кеша браузеров
FileETag MTime Size
<ifmodule mod_expires.c>
<filesmatch ".(jpg|jpeg|gif|png|ico|css|js)$">
ExpiresActive on
ExpiresDefault "access plus 1 year"
</filesmatch>
</ifmodule>
#Запрет отдачи HTTP-заголовков Vary браузерам семейства MSIE
<IfModule mod_setenvif.c>
BrowserMatch "MSIE" force-no-vary
BrowserMatch "Mozilla/4.[0-9]{2}" force-no-vary
</IfModule>
А мне надо просто на компьютер с ubuntu поставить локально и работать..