Настройка Docker4Drupal для Drupal 7

Выделим папку под проект ~/docker/drupal7

Скачаем последний релиз Docker4Drupal и распакуем файлы в эту папку

Отредактируем файл .env

PROJECT_NAME=drupal7
PROJECT_BASE_URL=drupal7.localhost

...

PHP_TAG=5.6-dev-4.9.1

...

NGINX_VHOST_PRESET=drupal7

Отредактируем в файле docker-compose.yml в разделах php и nginx:

 volumes:
- ./:/var/www/html

Раскомментрировать весь раздел pma, если нужен PhpMyAdmin. По надобности, другие разделы.

Удалить файл docker-compose.overwrite.yml.

Закачаем файлы Drupal 7 в эту же папку проекта.

Запускаем контейнеры из docker-compose.yml:

$ cd~/docker/drupal7
$ docker-compose up -d

Если нужно исправить конфигурацию, после правок перезапускаем контейнеры:

$ docker-compose stop
$ docker-compose up -d

Данные базы, если не менять:

Хост: mariadb
База, пользователь и пароль: drupal

Адрес PMA: http://pma.drupal7.localhost:8000
Адрес сайта: http://drupal7.localhost:8000

 

Ubuntu 16.04 & Vesta CP — переключение между версиями PHP

Пример: Понижение до 5.6

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install -y php5.6
php -v
sudo a2dismod php7.0
sudo a2enmod php5.6
sudo service apache2 restart
sudo update-alternatives --set php /usr/bin/php5.6

sudo apt-get install php5.6-mysql php-gettext php5.6-mbstring php-xdebug libapache2-mod-php5.6

Пример включения нужного расширения: sudo phpenmod mbstring

sudo apt-get update
sudo update-alternatives --set php /usr/bin/php5.6
sudo service apache2 restart

Права доступа в Linux (permissions)

У файлов и папок есть три вида владения, а у владельца есть три вида прав.

Виды владений Виды прав
  1. User — пользователь
  2. Group — группа
  3. Other — прочие
  1. Read — чтение
  2. Write — запись
  3. Execute — выполнение

Примеры: 

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

Если есть право записи на файл, но нет прав записи на папку файла, можно менять содержимое файла но нельзя удалить или переименовать файл.

Обозначение

Права

Обозначение Право на
r чтение
w запись
x выполнение

Владельцы

Обозначение Владелец
u Пользователь
g Группа
o Прочие
a Все

Действия

Обозначение Действие
+ Добавить право
Удалить право
= Установить право

Чтобы увидеть права и владельцев файла или папки, можно набрать в терминале ls -l. Пример:


$ ls -l
-rw-r--r-- 1 root root 11321 Oct 15 22:22 index.html

Понимать это следует так:

rw- r— r— root root index.html

Флаг
«-» файл

«d» папка

Права пользователя владеющего файлом|папкой Права группы владеющей файлом|папкой Права не владеющих файлом|папкой Пользователь владеющий файлом|папкой Группа владеющая файлом|папкой

Название файла|папки

Например, информация о папке со всеми правами всех владельцев будет выведена так:

drwxrwxrwx

Аналогично, для файла:

-rwxrwxrwx

Цифровое обозначение

Можно комбинацию прав одного типа владения заменить цифрой. Вот так цифры соответствуют правам:

0 ---
1 --x
2 -w-
3 -wx
4 r--
5 r-x
6 rw-
7 rwx

Установка прав

$ chmod 644 test.txt

или

$ chmod u = rw test.txt

или

$ chmod g + r test.txt

или

$ chmod go - w test.txt

Установить пользователя и группу:

$ chown admin:amdin test.txt

Установить пользователя:

$ chown admin test.txt

Установить группу:

$ chgrp admin test.txt

Установить для папки и ее содержимого (рекурсивно):

$ chown -R admin:admin test

Nano — редактор текста

Использование:

$ nano /path/to/file.txt

Управление:

Ctrl + O Сохранить изменения.
Ctrl + X

Выход. Если были не сохраненные изменения, нажать:
Y — чтобы сохранить;
N — чтобы не сохранять.

Ctrl + K Вырезать строку.
Ctrl + U Вставить строку.

 

Как обернуть элемент в тег — JavaScript

Например, обернем картинку в div с классом my-image.


<p>
<img id="photo" src="/images/photo.jpg" />
</p>


var image_code = document.getElementById('photo').parentElement.innerHTML; // получаем html код внутри родительского элемента
document.getElementById('photo').parentElement.innerHTML = '<div class="my-image">' + image_code + '</div>';

Изменить метки полей Views exposed filter between date

function mytheme_form_views_exposed_form_alter(array &$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
	switch ($form['#id']) {
		case 'views-exposed-form-myviewsname-page-1':
			$form['created']['min']['#title'] = 'от';
			$form['created']['max']['#title'] = 'до';
			break;
		case 'views-exposed-form-myviewsname-page-2':
			$form['created']['min']['#title'] = 'от';
			$form['created']['max']['#title'] = 'до';
			break;
	}
}

Как перебрать HTMLCollection с помощью forEach?

HTMLCollection — это объект, ведущий себя подобно массиву. Например, чтобы получить один элемент коллекции, можно обратиться как к элементу массива по индексу:

<a href="link1">Link 1</a>
<a href="link2">Link 2</a>
var links = document.getElementsByTagName('a'); //HTMLCollection
alert(links[0]);

Но перебрать коллекцию как массив уже не получится:

links.forEach(function(link, i, links) {
    alert(link);
}); 

Чтобы получилось, нужно получить массив из HTMLCollection перед проходом:

var links_as_arr = Array.from(links);
links_as_arr.forEach(function(link, i, links_as_arr) {
    alert(link);
}); 

Или использовать один из следующих вариантов.

Подлиннее:

Array.prototype.forEach.call(links, function(link) {
    alert(link);
});

Покороче:

[].forEach.call(links, function(link) {
    alert(link);
});