Web Мастерская»Блог

Сообщество Web Мастеров. Тут собрано всё, чтобы написать свой первый сайт, запустить его в Интернет и поддерживать его в течении всей его работы.

jQuery: проверка наличие элемента в массиве

Для проверки элемента в массиве в библиотеку jQuery добавлена функция jQuery.inArray():
if (jQuery.inArray('js', ['js', 'jQuery']) > -1) {
    // Элемент существует в массиве
};

Вместо: jQuery.inArray можно писать: $.inArray....

Как посчитать количество элементов на чистом CSS

CSS
Допустим у нас есть блок с ID block, в котором находятся элементы (<span> или другие), и нам надо посчитать их на чистом CSS:
<div id="block">
    <span></span>
    <span></span>
    <span></span>
</div>

Добавим блок, для вывода количества элементов:
<div id="sum"></div>

Затем считаем на чистом CSS:
#block {
	counter-reset: block;
}

#block > span {
	counter-increment: block;
}

#sum:before {
	content: counter(block);
}

CSS посчитает элементов в блоке и выведет результат в блок <div id="sum"></div>....

Nginx: Удаление параметров в URL

Где есть пагинация (1, 2, 3, и так далее), например, тема форума, первая страница может открываться по трем адресам:
  1. site/forum/thread/xxx/
  2. site/forum/thread/xxx/page_0/
  3. site/forum/thread/xxx/page_1/

Параметр page_X нужен начиная со второй страницы, но ни как не первой. На то, что одна страница открывается по нескольким адресам, могут ругаться поисковые системы. Я избавился от ненужного параметра для первых страниц, где есть пагинация, на PHP:
		// Удаление "page_0" | "page_1" из URL
		if (preg_match('/page_(0|1)?\//i', $url) && stristr($url, 'admincp/') === false)
		{
			$url = preg_replace('/page_(0|1)?\//', '', $url);
		} // End: Удаление "page_0" | "page_1" из URL

Имея возможность редактировать конфигурацию Nginx, я решил переписать удаление параметров в Nginx. Важно было, чтобы параметр бул удален только при значении 0 и 1, значения 10, 11, 12 и так далее, оставались. Сделал в server:
	# Удаление "page_0" | "page_1" из URL
	location ~* ^(.*)/page_(0|1)/$ {
		return 301
...

Nginx: Добавление слеша в конце URL, если его там нет

Ранее страницы моего сайта открывались, как с слэшем в конце URL, так и без него. Чтобы не допустить дублей страниц, я решил, что мой сайт будет работать только с слэшем в конце URL. Проверку слэша и его добавления делал на PHP:
		// Добавление слеша в конце URL, если его там нет
		if (substr($url, -1) != '/')
		{
			if (!preg_match('/(.*)\.(jpg|jpeg|gif|png|js|css|ico)/i', $url))
			{
				$url = $url . '/';
			}
		} // End: Добавление слеша в конце URL, если его там нет

Слэш добавляется ко всем URL, кроме тех, что имеют на конце: jpg|jpeg|gif|png|js|css|ico.

Всё работает отлично, но грешно делать это на PHP, если есть Nginx... Поискав в интернете решение моей задачи, нашёл такую строку кода:
rewrite ^([^.\?]*[^/])$ $1/ permanent;

Данный код добавляет слэш в конец всем URL, кроме тех, где есть точка (.) или параметры (id=1). А значит картинки, к которым будут обращаться на прямую, остаются без слэша.

Вставил строку в location:
	location / {
		rewrite ^([^.\?]*[^/])$ $1/
...

Nginx: Удаление лишних слэшев в URL

Ранее я удалял лишние слэши, при помощи PHP. Делал так:
		// Удаление лишних слешев
		if (preg_match('/\/{2,}/i', $url))
		{
			$url = preg_replace('/\/{2,}/', '$1/', $url);
		} // End: Удаление лишних слешев

Сегодня, наконец то, дошли руки, чтобы перенести удаление лишних слэшев в конфиг Nginx. Я добавил в server следующий код:
	# Удаление лишних слешев
	if ($request_uri ~ "//") {
		return 301 $uri;
	} # End: Удаление лишних слешев

После чего перечитал конфигурацию, при помощи команды:
nginx -s reload

Теперь код в PHP удаляю, больше он не нужен. Работает Nginx.

Возможно, будет интересно:
- Блог: Nginx: Добавление слеша в конце URL, если его там нет
- Блог: Nginx: Удаление параметров в URL...