<form method="get" id="testForm">
<input type="text" name="name" class="page" />
<input type="submit" name="search" id="search" value="Поиск"/>
<input type="hidden" name="current_page" id="current_page" value="{current_page}">
</form>
<span id="pagination">
<span class="toPage" data-num="1">1</span>
<span class="toPage" data-num="2">2</span>
<span class="toPage" data-num="3">3</span>
<span class="toPage" data-num="4">4</span>
<span class="toPage" data-num="5">5</span>
<span class="toPage" data-num="6">6</span>
<span class="toPage" data-num="7">7</span>
</span>
$(document).on("click", ".toPage", function () {
var num = $(this).data("num");
$(".page").prop("value", num);
$("#testForm").trigger("submit");
});
<form id="myForm" method="get">
<input type="text" name="name" value="Ваше имя">
<input id="send" type="submit" name="send" value="Отправить">
</form>
$( "#btn-yes" ).click(function() {
$( "#myForm" ).submit();
});
<form method="get" id="delForm">
<input id="dell" type="button" name="dell" value="Delete">
</form>
function checkButton()
{
var hid = document.getElementById('hidden'); //Находим id всасывающегося окна
var yes = document.getElementById('yes'); // id кнопки ДА
var no = document.getElementById('no'); // id кнопки НЕТ
yes.onclick = function(e) //если будет нажата кнопка ДА
{
var frm = document.getElementById('delForm'); //Находим id формы
this.onclick = null;
hid.className = ''; // скрывается окно подтверждения
frm.submit(); //// отправка на сервер происходит
e.stopPropagation();
e.preventDefault();
};
no.onclick = function(e) // Если будет нажата кнопка НЕТ
{
var hid = document.getElementById('hidden'); //Находим id всасывающегося окна
this.onclick = null;
hid.className = ''; //скрывается окно подтверждения
// отправка на сервер не происходит
e.stopPropagation();
e.preventDefault();
}
// Oтображается окно подтверждения.
hid.className = 'substrate';
}
window.onload = function(e)
{
var myf = document.getElementById('dell');
myf.onclick = checkButton; //Подписка на событие клика по кнопке УДАЛИТЬ
e.stopPropagation();
e.preventDefault();
}
.show-none{
display:none; /* просто прячем окно, а не задвигаем его в минуса */
}
.substrate{
...
/{[ \t]*foreach[ \t]*\$_*[A-Za-z]+[A-Za-z0-9_]*[ \t]*as[ \t]*\$_*[A-Za-z]+[A-Za-z0-9_]*(?:[ \t]=>[ \t]*\$_*[A-Za-z]+[A-Za-z0-9_]*)?[ \t]*}.*{[ \t]*\/foreach[ \t]*}/gi
var $j = jQuery.noConflict();
$j(document).ready(function() {
$j('ul.tabs1 li').css('cursor', 'pointer');
$j('ul.tabs1 li').click(function(){
var thisClass = this.className.slice(0,2);
$j('div.t1').hide();
$j('div.t2').hide();
$j('div.t3').hide();
$j('div.t4').hide();
$j('div.' + thisClass).show();
$j('ul.tabs1 li').removeClass('tab-current');
$j(this).addClass('tab-current');
});
});
$j( document ).ready(function() {
$j(":input[type=button]","#searchform").click(function() {
$j(this).closest('form').find(':input','option:selected')
.not(':button, :submit, :reset, :hidden')
.val('')
.removeAttr('checked')
.removeAttr('selected');
});
});
SELECT `g`.`id` g_id, `g`.`name` g_name, COUNT(`u`.`id`) g_count FROM `groups` g LEFT JOIN `users` u ON `g`.`id` = `u`.`user_group`
SELECT `id` AS g_id,
`name` ,
(
SELECT count( * )
FROM `users`
WHERE `users`.user_group = g_id
) AS user_in_group
FROM `groups`
<?php
/**
* Простой роутер
* @devg
*/
final class RouterLite {
public static $routes = array();
private static $params = array();
public static $requestedUrl = '';
/**
* Добавить маршрут
*/
public static function addRoute($route, $destination=null) {
if ($destination != null && !is_array($route)) {
$route = array($route => $destination);
}
self::$routes = array_merge(self::$routes, $route);
}
/**
* Разделить переданный URL на компоненты
*/
public static function splitUrl($url) {
return preg_split('/\//', $url, -1, PREG_SPLIT_NO_EMPTY);
}
/**
* Текущий обработанный URL
*/
public static function getCurrentUrl() {
return (self::$requestedUrl?:'/');
}
/**
* Обработка переданного URL
*/
public static function dispatch($requestedUrl = null) {
// Если URL не передан, берем его из REQUEST_URI
if ($requestedUrl === null) {
$uri = reset(explode('?', $_SERVER["REQUEST_URI"]));
$requestedUrl = urldecode(rtrim($uri, '/'));
}
self::$requestedUrl = $requestedUrl;
// если URL и маршрут полностью совпадают
if (isset(self::$routes[$requestedUrl])) {
self::$params = self::splitUrl(self::$routes[$requestedUrl]);
return self::executeAction();
}
foreach (self::$routes as $route => $uri) {
// Заменяем wildcards на рег. выражения
if (strpos($route, ':') !== false) {
$route = str_replace(':any', '(.+)', str_replace(':num', '([0-9]+)', $route));
}
if (preg_match('#^'.$route.'$#', $requestedUrl)) {
if (strpos($uri, '$') !== false && strpos($route, '(') !== false) {
$uri = preg_replace('#^'.$route.'$#', $uri, $requestedUrl);
}
self::$params = self::splitUrl($uri);
break; // URL обработан!
}
}
return self::executeAction();
}
/**
* Запуск соответствующего действия/экшена/метода контроллера
*/
public static function executeAction() {
$controller = isset(self::$params[0]) ? self::$params[0]: 'DefaultController';
$action = isset(self::$params[1]) ? self::$params[1]: 'default_method';
$params = array_slice(self::$params, 2);
return call_user_func_array(array($controller, $action), $params);
}
}
?>
<?php
// маршруты (можно хранить в конфиге приложения)
// можно использовать wildcards (подстановки):
// :any - любое цифробуквенное сочетание
// :num - только цифры
// в результирующее выражение записываются как $1, $2 и т.д. по порядку
$routes = array(
// 'url' => 'контроллер/действие/параметр1/параметр2/параметр3'
'/' => 'MainController/index', // главная страница
'/contacts' => 'MainController/contacts', // страница контактов
'/blog' => 'BlogController/index', // список постов блога
'/blog/:num' => 'BlogController/viewPost/$1' // просмотр отдельного поста, например, /blog/123
'/blog/:any/:num' => 'BlogController/$1/$2' // действия над постом, например, /blog/edit/123 или /blog/dеlete/123
'/:any' => 'MainController/anyAction' // все остальные запросы обрабатываются здесь
));
// добавляем все маршруты за раз
RouterLite::addRoute($routes);
// а можно добавлять по одному
RouterLite::addRoute('/about', 'MainController/about');
// непосредственно запуск обработки
RouterLite::dispatch();
?>
с перспективой дальнейшего развития