Создание виджетов в Yii2

Мне нравится Yii Framework тем, что это полностью обьектно-ориентированный инструмент для разработки веб-сайтов.

Недавно я искал виджет для работы с Google Place API, который бы мог предугадывать введенные клиентом даные. Картинка виджета показана вначале статьи.

Для создания виджетов в Yii2 не нужно знать многого и если вы любитель JavaScript и прочих фишек для розработки UI, тогда это статья для вас. Для создания виджета нужно зделать следующие шаги.

Алгоритм быстрой сортировки (Quick sort algorithm)

Алгоритм быстрой сортировки - это алгоритм из серии "разделяй и властвуй", поэтому разобьем алгоритм на три части: разделение, властвование и комбинирование.

Для наглядности позначим сортируемый массив  А[p...r].

Разделение.

В этой части массив А[p...r] разбивается на две части, а именно на А[p...q-1] и А[q+1...r], где элементы А[p...q-1]  меньше или равно значению A[q], а элементы подмассива А[q+1...r] больше или равны значению A[q]. Где элемент q - вычисляется при исполнении процедуры разбиения.

Очередь или Queue

Еще одним абстрактным простым типом данных есть Очередь/Queue.

Очередь реализует принцып первый вошел первый вышел (FIFO - first in first out). Каждый из вас уже видел очередь в своей жизни, когда стоял за билетами в кино или теарт. Очередь имеет голову(head) и хвост(tail), которые соответственно есть люди в начале очереди и в конце. Самый первый человек в очереди уйдет первым, последний - соответственно последним)).

Стек/Stack

Одной из самых простых абстрактных структур даных есть Стек. Стек работает по принцыпу "последний зашел первый ушел" (LIFO - last in first out). Стек поддерживает две основные операции: pop i push. Конечно можно расширять функционал структуры. Если использовать простые типы даных, то стек, конечно, реализуется с помощью массивов.

Как программно создать блок в Drupal7

Так как же программно создать блок. Для создания собственного блока в Drupal 7.x нужно зделать 4 вещи:

1) Создать папку с именем модуля.

Как пример мы создадим блок который будет выводить ссылки для входа на сайт и выхода. Назвем наш модуль custom_login. Соответственно нужно назвать папку custom_login.

2) Создать файл с расширением .info.

Создадим файл custom_login.info. Нужно назвать файл так как называется модуль. Далее поместим следующий текст в даный файл.

Шаблон Factory Method

Проблема:

Давайте представим, что перед нами стоит задача представления даных в виде html страницы, xml файла и, к примеру, как csv файл и нам нужно написать класс, который будет вызывать нужный нам класс для отображения даных. Назвем наши классы HtmlDataView, XmlDataView, CsvDataView соответственно. Часто программисты для этой задачи используют либо условные операторы, либо switch-оператор. Назвем главный класс для обработки даных DataViewManager. Следующий код показывает, как можно решить эту задачу неправельным путем.

Треугольник

Задача:

Дан триугольник, нужно найти минимальную сумму пути от верхнего елемента до нижнего. Каждый шаг можна осуществлять только на соседние значения, которые лежат в нижнем ряду триугольника.

Ошибка в классе CToolsCssCache

Ошибка:

После обновления модуля ctools у меня выскочила следующаю ошибка:

Fatal error: Class CToolsCssCache contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (DrupalCacheInterface::__construct) in /pathtoproject/www/sites/all/modules/ctools/includes/css-cache.inc on line 52

Шаблон Facade

Проблема:

Как по мне, так многие пользовались шаблоном Facade, но они не подозревали об этом. Главная задача этого шаблона это создание единственной точки входа в клиентском коде. Попробую обьяснить, что я имею ввиду. К примеру, у вас есть ряд работающего процедурного кода связанного с парсингом txt-файла, в котором находится информация о продуктах,  и для того, что бы найти и вывести информацию об определенном товаре, вам понадобится написать, к примеру, такой код:

Плюс один

Задача:

Дано неотрицательное число представленое как массив цыфер. Добавте до этого числа плюс единицу.

Ограничение:

Цыфры подаются так, что наиболее значимое число стоит у головы массива.