PHPUnit-start

45646v

аап ааааа
ва
ыыыы

  • composer install - если надо пересобрать автолоадер и/или скачать компоненты для проекта
  • phpunit --bootstrap startTest.php test/core/ - запустить тесты в папке test/core/

xdebug

Возможно в nano /etc/php5/apache2/php.ini нужно будет менять ip у машины для разработки xdebug.remote_host = 192.168.0.xxx

frontend

Установка Gulp:

  1. Устанавливаем Node.js (если не установлено)
  2. Устанавливаем gulp npm install gulp -g (один раз - глобально) ??? нужно??
  3. Открываем папку с проектом в консоле
  4. npm init - создает файл package.json, который содержит информацию о проекте (описание проекта и зависимости).
  5. npm install gulp --save-dev - устанавливаем gulp в папку с проектом
    Примечание: npm install gulp --save-dev === npm i gulp -D (алисы не везде работают)
  6. Перечень необходимых пакетов:
    • npm i browserify -D - позволяет вам использовать стиль node.js модулей для работы в браузере. Мы определяем зависимости и потом Browserify собирает их в один маленький и чистенький JavaScript файл.
    • npm i vinyl-source-stream -D - виртуальная файловая система для чтения/записи файлов. Получаем выходные данные Browserify и сохранить их в файл с помощью Gulp.
    • npm i rimraf -D - полностью очищает каталог
    • npm i stringify -D - позволяет подключать статические файлы, например шаблоны.
    • npm i gulp-sftp -D - закачиваем изменения по ssh
      Примечание: При установки все скаченые модули располагаются в папке node_modules, зависимости прописываются в файл package.json. Если папка node_modules удалена, но в package.json прописаны зависимости, установить все пакеты можно командой npm install.
  7. Создаем в корне проекта файл gulpfile.js Ниже показано содержимое файла.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// импорт npm модулей в проект
var gulp = require('gulp'),
browserify = require('browserify'),
source = require('vinyl-source-stream'),
rimraf = require('rimraf'),
stringify = require('stringify');
var sourceFile = './src/main.js', // местоположение главного нашего js файла, точки входа
destFolder = './dist', // местоположение финального файла
destFile = 'bundle.js'; // имя, которое мы хотим дать нашему финальному файлу
// Сбор проекта в один файл
gulp.task('build', function() { // [0]
return browserify(sourceFile) // [1]
.transform(stringify({extensions: ['.tpl'], minify: true})) // [2]
.bundle() // [3]
.pipe(source(destFile)) // [4]
.pipe(gulp.dest(destFolder)); // [5]
});

[0] данная функция вызывается в консоле так: gulp build. В формальных параметрах могут также указываться функции, которые необходимо выполнить до начала работы данной функции, например gulp.task('build', ['copy-static'], function() { вызываем сначала функцию copy-static.

[1] главное тут в Browserify, ему передаем точку входа в наше приложение

[2] transform - метод Node, с которым можно работать благодаря browserify. Преобразует поток нужным образом.
stringify - позволяет подключать статические файлы, например шаблоны.
extensions: [‘.html’, ‘.tpl’, ‘.hbs’] - указываем форматы каких статических файлов можно подключать и позволяет складывать их в переменную
minify - минимизирует файлы
Пимечание: если в gulpfile.js не указать stringify, то в файлах проекта нельзя будет подключать шаблоны: var AppTpl = require('./../templates/App.tpl');

[3] используем потоковый Browserify API для того, чтобы вернуть поток с нашим JS контентом

[4] [5] перекидываем информацию из потока в файл и сохраняем его в директорию.

Примечание: Функции require, pipe и transform относятся к Node:
1) require - метод для импорта модулей, JSON-файлов, папок и т.д.
2) pipe - принимает поток, который используется для передачи читаемого потока в записываемый.
3) transform - метод Node, с которым можно работать благодаря browserify. Преобразует поток нужным образом.


args = require(‘yargs’).argv;

gulp.task(‘test’, function () {

var env      = args.env || 'prod'; // команда в консоле: gulp test --env df (выводит df)
console.log(env);

});












https://loftblog.ru/material/gulp-js-rabotaem-s-css-concat-minify-rename-notify-watch-dest/
https://www.8host.com/blog/nachalo-raboty-s-gulp-js/
http://www.creative-seo.ru/blog/gulp-dlya-nachinayushchih/
http://pugofka.com/blog/technology/the-prepared-starting-package-front-end-development-on-gulp/
http://getinstance.info/articles/tools/introduction-to-gulp/
https://habrahabr.ru/post/224825/ !!!!!

http://www.creative-seo.ru/blog/gulp-dlya-nachinayushchih/

Рецепты по Backbone

Решение, которое добовляет функции, сробатывающие до и после рендера:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var myView = Backbone.View.extend({
initialize: function(options) {
_.bindAll(this, 'beforeRender', 'render', 'afterRender');
var _this = this;
this.render = _.wrap(this.render, function(render) {
_this.beforeRender();
render();
_this.afterRender();
return _this;
});
},
beforeRender: function() {
console.log('beforeRender');
},
render: function() {
return this;
},
afterRender: function() {
console.log('afterRender');
}
});

zametka_po_js

Если внутри функции transcriptionsPanel использовать объект options.div, то несмотря на то что используется var из-за $('<div/>', {class: 'transcriptions-vowel'}) будет использоваться один и тот же элемент в DOM при разных вызовах функции transcriptionsPanel. Будет полная фигня, никогда так не делать.

1
2
3
4
5
6
7
8
9
10
11
12
(function($) {
// Объект для гласных звуков
var defaults = {
div: $('<div/>', {class: 'transcriptions-vowel'}),
sounds: [['i:', 'ı', 'e', 'ə:', 'ə', 'ʌ', 'ˈ'], ['ɔ:', 'ɔ', 'u:', 'u', 'a:', 'æ', 'ˌ']]
};
$.fn.transcriptionsPanel = function(params) {
var options = $.extend({}, defaults, options, params);
...
}
})(jQuery);

Склонировать объект можно таким способом (в случае с примером выше клонирование не поможет):

1
2
3
var cloneOfA = JSON.parse(JSON.stringify(a));
или
var copiedObject = jQuery.extend(true, {}, originalObject);

Основы CSS

Приоритет стилей CSS

Ниже написаны приоритеты css стилей по возростанию:

  1. Стили браузера (т.к. каждый браузер оформляет по своему, придумали CSS Reset)
  2. Стили заданные пользователем в настройках браузера (встречается редко)
  3. Стили автора сайта
    1. Стили подключенные во внешнем файле.
    2. Стили внутри HTML, вставленные с помощью тега < style >
    3. Стили указанные у тэга в атрибуте style (это плохо)
    4. Самый высокий приоритет у правил с меткой !important

При равном приоритете применяется то правило, которое было объявлено последним.

Селекторы [0:1:255:0]


HTML тэги делятся на:

  1. Блочные (block): h1, div и т.д.
  2. Строчные (inline): a, span и т.д.

Нельзя внутри строчных элементов размешать блочные, это одна из распростроненных ошибок.
Ошибка: <a href='#'><h1> Зоголовок </h1></a>

jsnote

Навешивае событие на transcriptionDiv, экономим ресурсы.

1
$(transcriptionDiv).on('click', '.transcriptions-sounds button', function() {

phpstormnotes

Merge делать с помошью комбинации ⌘⇧M (установил комбинацию) или VCS/Git/Merge Changes и с установленной галочкой No Fast Forward. Подробней можно прочесть в документация по Merge в phpStorm. По умолчанию коммиты ветви выглядят так будто были сделаны в транк. В консоле нужно мержить с флагом --no-ff
git merge <имя_ветви> --no-ff

yiinotes

HTML хелпер

Необходимо подключить: use yii\helpers\Html;

Html::dropDownList($name, $selection, $items, $options) - генерация выподающего списка, где:
$name - атрибут name
$selection - пункт по умолчанию, необходимо указать значение value или null если этого не требуется.
$items - массив из которого генерятся варианты списка, где ключи массива это value, а значение это текст тэга option
$options - массив с настройками, например: ['class' => 'form-control', 'id' => 'qaz']

Вставка из php в input, когда заначение содержит двойные ковычки: !!!
<input name="customer_name" id="customer_name" class="form-control" type="text" value="<?= htmlspecialchars($client['customer_name']) ?>">

У меня консольные команды для миграции не работают если в настройках /common/config/main-local.php выставлена следующая настройка (хз почему так):

1
2
3
'request' => [
'enableCsrfValidation' => false
],