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

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

Не использовать "cursor: pointer" если элемент "disabled"

Есть выбор из перечисленного:
<input type="radio" class="choice" id="choice1" name:"action" />
<label class="categorylabel" for="choice1">
	<div>
		<!-- -->
	</div>
</label>

<input type="radio" class="choice" id="choice2" name:"action" disabled />
<label class="categorylabel" for="choice2">
	<div>
		<!-- -->
	</div>
</label>

На одном input прописан: disabled (Запрет использовать). Стояла задача менять курсор при наведении на label, но не менять курсор, если элемент имеет: disabled. Для решения этой задачи использовался следующий CSS код:
input[type="radio"][disabled] {
  cursor: default;
}

input[type="radio"]:not([disabled]) + label {
  cursor: pointer;
}

Теперь, если у тега есть: disabled, курсор не меняется на указательный палец, остаётся стрелочкой....

PHP: Как составить из строки элемент массива

PHP
Стояла задача, составить из получаемой строки элемент массива. Допустим, есть такой массив:
$arr = [
	'k1' => [
		'k2' => [
			'k3' => [
				'k4' => 'v'
				]
			]
		]
];

Функция принимает строку: k1/k2/k3, используя данную строку, необходимо отдать элемент массива: $arr['k1']['k2']['k3'].

С решением помогли на Хабр:
<?php
$arr = [
	'k1' => [
		'k2' => [
			'k3' => [
				'k4' => 'v'
				]
			]
		]
];

$s = "k1/k2/k3";

$array = explode('/', $s);

foreach ($array as $v)
{
	$arr = $arr[$v];
}

Оказалось, всё просто! С каждой итерацией мы переходим к следующему "вложению" массива, подбираясь к нужному нам элементу.

Проверяем:
print_r($arr);

На экране видим:
['k4' => 'v']

А значит всё правильно.

Для решении мой задачи, так же, есть библиотека Array Dot Notation, но я выбрал решение выше....

Cannot use object of type stdClass as array

При очередном написании скрипта на PHP, получил ошибку: Cannot use object of type stdClass as array, которая сообщает о невозможности использовать объект, как массив. То есть, я где то хочу получить значение из массива, который, на самом деле, не является массивом.

Смотрю по коду: Я использую функцию: json_decode, чтобы перевести JSON в массив:
$data = json_decode($data);

Логично, что дальше я могу писать так: $data['val'], чтобы работать со значением val... Я так думал, но нет...

Чтобы работать с $data['val'], необходимо использовать функцию: json_decode со вторым параметром. Второй параметр: true, и это служит для возврата ассоциативного массива, а не объекта:
$data = json_decode($data, true);

Ошибка исправлена!...

Как правильно писать функцию в обработчике события?

Для примера пишем функцию: display, так:
function display(param) {
	/* Code Function */
};

Или так:
var display = function(param) {
	/* Code Function */
};

Теперь пробуем вызывать функцию, при клике на ссылку (class="beginning"):
Первый вариант на jQuery:
$(document).on('click', 'a.beginning', () => {
	display('cover');
});

Первый вариант на чистом JS:
var beginning = document.querySelector('a.beginning');				
beginning.addEventListener('click',  function() {
	display('cover');
});

Или, второй вариант на jQuery:
$(document).on('click', 'a.beginning', display('cover'));

Второй вариант на чистом JS:
var beginning = document.querySelector('a.beginning');				
beginning.addEventListener('click', display('cover'));

Какой из вариантов, по Вашему, будет работать, а какой нет? Работать будет первый вариант, как на jQuery, так и на чистом JS. Именно первый вариант является правильным....

Nginx: Как запретить прямое обращение к файлам

Для одной задумки потребовалось запретить прямое обращение к файлам, при этом, чтобы сценарий движка, мог иметь полный доступ, к файлам. Сделать это надо было на Nginx. Мне помогли с этим и сейчас расскажу, что необходимо сделать, чтобы запретить.

Папка для запрета: /app/XX/data/. Вместо XX идентификатор приложения, то есть цифры, которые постоянно меняются.

Код для конфига Nginx:
	location ~* /app/\d+/data/ {
		valid_referers server_names;
		if ($invalid_referer) {
			return 404;
		}
	}

Многие пишут return 403 (Запрещено), я решил, что будет лучше отправлять на 404 ошибку, нежели прямо давать понять, что сюда нельзя.

После добавления строк выше, необходимо перечитать конфигурацию. Для этого я использую команду:
nginx -s reload

Готово. Теперь папка data скрыта от прямого обращения.

Возможно, пригодится: Тема: Команды для настройки сервера....