Для получения полного доступа
зарегистрируйтесь

dfatt    256   41 933


Красивый и практичный дизайн — моя страсть. Нравится хороший код, стремлюсь писать также красиво. Главное для меня в разработке и дизайне — это простота, и понятность.

  • Kazan
  • Stash
  • PHP, C#, JS
  • Зарегистрирован 2 года назад

Эта библиотека проста в использовании, имеет удобный API, небольшой вес, множество локализаций. Далее мы разберём пример её использования.

Продолжение

К своему стыду обнаружил, что в классе Controller, фреймвока Symfony 3, есть следующие полезные методы. Если вы про это знаете, то листайте дальше, тут ничего нового не будет :)

json

Если нужно отдать Response в JSON, нам достаточно выполнить код:

$data = ['hello' => 'world'];
return $this->json($data);

file

Этот метод понадобиться, когда вам нужно отдать файл для скачивания:

return $this->file('/path/to/file.doc');

Продолжение

Во время тестирования REST API, вам приходит строка JSON, на вид не читабельная, особенно если вам нужно скинуть этот JSON своему коллеге. Что бы упростить эту задачу, можно воспользоваться jq

Продолжение

Данная библиотека автоматически приводит код к нужному стандарту — PSR-1, PSR-2. На входе указываем файл или директорию, после этого, код будет отформатирован по указанному стандарту. Также есть возможность настроить форматирование через опции.

Установка

Скачиваем

curl -L https://github.com/FriendsOfPHP/PHP-CS-Fixer/releases/download/v2.0.0/php-cs-fixer.phar -o php-cs-fixer

Переносим, для доступа к утилите, из любого места

sudo chmod a+x php-cs-fixer
sudo mv php-cs-fixer /usr/local/bin/php-cs-fixer

Продолжение

У меня была задача, сделать добавление видео в чат. Для этого пользователю достаточно указать ссылку на видео, затем из мы извлекаем id, который можем передать в embed, и в чате уже вывести видео.

Проблема была в следующем, видов ссылок на видео с ютуба, может быть два (или больше).

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

UPD. Используется версия jestonedev

function youTubeGetId(url) {
    var expression = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be[.]?\/|youtube\.com[.]?\/(?:embed\/|v\/|watch\/?\?(?:\S+=\S*&)*v=))([\w-]{11})\S*$/;
    return url.match(expression) ? RegExp.$1 : undefined;
}

Главной фичей CMS является то, что вам не нужна база данных (данные храняться в файлах), за счёт чего и достигается простота в установке. Для установки CMS, вы можете — либо просто распоковать *.zip-архтив, либо установить через Composer:

composer create-project getgrav/grav ~/webroot/grav

В состав CMS, входят следующие библиотеки:

  • Twig Templating
  • Markdown
  • YAML
  • Parsedown
  • Doctrine Cache
  • Pimple Dependency Injection Container
  • Symfony Event Dispatcher
  • Symfony Console
  • Gregwar Image Library

Простая в использовании библиотека, позволяет строить красивые графики использую <canvas>.

Фичи

— Библиотека содержит 8 типов графиков
— Графики адаптивны — будут выглядеть везде хорошо, как на десктопах, так и на мобильных устройствах
— Можно совмещать разные типы графиков
— Отличная документация
— Простое API

Теперь покажу пример подключения и использования библиотеки, и перейдём к типам видов графиков (картинки).

Продолжение

Плюсом данного фреймворка является то, что написав код для бота, он будет работать для множества платформ:

  1. Slack
  2. Telegram
  3. Microsoft Bot Framework
  4. Nexmo
  5. HipChat
  6. Facebook Messenger

Кроме того, вы можете определять как будет вести себя команда для определённого мессенджера. Например, так:

// Restrict to Slack and Telegram driver
$botman->hears('keyword', function(BotMan $bot) {
    // do something to respond to message
    $bot->reply('You used a keyword!');
})->driver([SlackDriver::DRIVER_NAME, TelegramDriver::DRIVER_NAME]);

Как написали в комментариях к моему сниппету, 58kb довольно много для инпута от которого нужен только поиск.Правда этот вариант требует jQuery, но, нет проблем переписать на Vanila JS.

Покажу сразу результат того, что у нас получится:

А теперь, к делу. Для начала добавим общий скелет:

Продолжение

На сайте Designmodo предоставлена большая подборка плагинов, без дополнительных библиотек типа jQuery.

В подборке есть плагин для модальных окон, сладер, проигрыватель видео, кастомный скроллбар и много другое. Вот список некоторых, интересных плагинов на мой взгляд.

Plyr (Github)
Красивый плеер для воспроизведения видео с таких сервисов как Youtube, Vimeo

Продолжение

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

Для того чтобы отменить коммит, достаточно в консоли ввести команду:

git reset --soft HEAD~

0X0pVCN.png

Если вам нужно, чтобы открытый popover в Boostrap 3 по наведению не скрывался, пока курсор на самом popover, вам поможет следующее решение.

Демо 97f041fdf9247cf838713969b2855d0b.gif

Продолжение

Если вы используете репозитории, то выбрать записи с некоторыми ID можно через метод findBy

$em = $this->get('doctrine')->getManager('default');

$statusIds = [120, 130, 230, 240];
$shippings = $em->getRepository('AppBundle:Item')->findBy(['status'=> $statusIds]);

Задача была следующей, сделать красивую полосу прокрутки для кода сниппетов. В MacOS, полоса прокрутки очень минималистична и красиво вписывается в наш интерфейс. Но, в Windows и других OS, полоса прокрутки выглядет везде по разному. Поэтому было решено заменить системный скроллбар на свой.

Долго искать не пришлось, выбор пал на PerfectScrollbar который очень просто используется. Для начала демо того что получилось:

89f82efb23d7643ffb367b9adf801611.gif

Продолжение

В одном проекте, мне понадобилось сделать простую проверку доступа к страница в CI.

В док-комментарии я устанавливал значение @auth_required, мне нужно было узнать, установленно ли оно у класса или нет.

Пример чуть шире, извлекаем текст комментария из класса и метода.

/**
 * Class Test
 * @val1
 * @val2
 */
class Test
{
    /**
     * Method test()
     * @val1
     * @val2
     */
    public function test()
    {
    }
}

$reflectionClass = new ReflectionClass('Test');
$reflectionMethod = new ReflectionMethod('Test', 'test');

var_dump($reflectionClass->getDocComment());
var_dump($reflectionMethod->getDocComment());

Сразу покажу демо:

l41m5gGukcDpZa2MU.gif

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

Добавляем через composer Ratchet:

composer require cboden/ratchet

Затем, создаём контроллер в папке commands для запуска сервера:

Продолжение

Если вам не подходит это решение по каким-то своим причинам, и у вас большой список элементов в dropdown. Вы можете добавить обычный скролл списка:

4aab5b09613354a2e25c115a4e8dd84a.gif

Добавим класс scrollable

<div class="dropdown">
    <button class="btn btn-default dropdown-toggle" type="button" id="menu" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
        Dropdown
        <span class="caret"></span>
    </button>
    <ul class="dropdown-menu scrollable" aria-labelledby="menu">
        <li><a href="#">Action</a></li>
        <li><a href="#">Another action</a></li>
        <li><a href="#">Something else here</a></li>
        ...
    </ul>
</div>

И последний шаг, css:

.dropdown-menu.scrollable {
    height: auto;
    max-height: 30em;
    overflow-x: hidden;
}

Простая в использовании, но довольно мощная в плане возможностей библиотека Essence. Данная библиотека поддерживает 68 сайтов - Youtube, Twitter, Vimeo, Vine и тд.

Демо:

d338627098c55af2e1d499bbee73d876.gif

Продолжение

Наткнулся на полезный (кто бы сомневался) проект Flysystem, от замечательной команды The League of Extraordinary Packages, который позволяет работать с такими хранилищами файлов как Dropbox, AWS, Azure, FTP, SFTP, WebDAV и другими. Для популярных фреймворков уже есть готовые интеграции, в том числе и для yii2 — yii2-flysystem

Допустим, нам необходимо создать папку для Dropbox. Создадим приложение на сайте, сгенерируем токен:

rAbTDKa.png

Добавим в composer:

composer require creocoder/yii2-flysystem

И подключим нужный нам адаптер, в нашем случае Dropbox:

Продолжение

Бывают ситуации когда нет смысла использовать серверы очередей, типа Rabbitmq, German, etc. Была задача - отправка писем пользователям, проверка на поступление оплаты.

Для этого было решено написать простой класс, который считывает сообщения из таблицы, удаляет сообщения, добавлят задачу в таблицу.

На тот момент я решил задачу с помощью Doctrine 2 + CI 2. Надеюсь, что общий принцип будет понятен, и это решение вы сможете подстроить под себя.

Продолжение