jumper423 58 25 331
Роллер)
Роллер)
Пакет создан для стандартизации всех сервисов по разгадыванию капч. У каждого сервиса есть свои особенности и теперь Вам надо будет всего лишь взглянуть на документацию конкретного сервиса чтобы правильно всё сделать. Так же пакет покрывает всю функциональсть сервисов. Если же Вам будет чего-то нехватать или будут предложения, я буду только рад их услышать.
php composer.phar require --prefer-dist jumper423/file-iterator
или
"jumper423/yfile-iterator": "*"
в файле composer.json.
$fileIterator = new \jumper423\FileIterator(__DIR__ . '/file');
$fileIterator->rewind();
$fileIterator->next();
$fileIterator->next();
$fileIterator->seek(3);
$fileIterator->next();
echo $fileIterator->current();
$fileIterator->next();
echo $fileIterator->current();
$fileIterator->seek(9);
$fileIterator->next();
$fileIterator->next();
if ($fileIterator->valid()) {
...
}
vendor/bin/phpunit
Приём смс сообщений
Компонент позволяет объединить несколько сервисов по приёму смс сообщений.
На данные момент разработано api для сервисов
Плавная сортировка вертикальных элементов.
Главной задачей было добиться максимальной быстрой скорости сортировки и отрисовки, без лишних действий. Данный плагин предназначен для узкого списка задач, по этому на супер функциональность в нём можете не рассчитывать.
Так же есть AssetBundle для Yii2 SmoothSortAsset
Компонент для расширенной работы с ВК API в YII2. Загрузка изображений, распознавание капчи, постановка очередей и многое другое.
Сайт с подробным описанием yii2 api vk GitHub
Компонент предоставляет возможность лёгкой работы со всеми сервисами по распознаванию капч работающих по общим стандартам. Я лично использую ruCaptcha(цены вполне устраивают от 13 до 44 рублей за 1000 капч).
Настройка
...
'components' => [
'captcha' => [
'class' => 'jumper423\Captcha', //Компонент который мы будем использовать
'pathTmp' => '@common/captcha', //Если мы в качестве капчи будем использовать ссылку на нём, то необходимо указать куда будут складироваться файлы
'apiKey' => '42eab4119020dbc729f657fef178r546', // API ключ
],
],
...
Ссылки: — GitHub — Packagist — Сайт
$path = 'path/to/captcha.png';
if (\Yii::$app->captcha->run($path)) {
$captcha = \Yii::$app->captcha->result();
} else {
throw new Exception(\Yii::$app->captcha->error());
}
// или для ссылок
$url = 'https://vk.com/captcha.php?sid=698254154192&s=1';
if (\Yii::$app->captcha->run($url)) {
$captcha = \Yii::$app->captcha->result();
} else {
throw new Exception(\Yii::$app->captcha->error());
}
Использование
if ($('#subcategories').view()) {
alert('Виден');
} else {
alert('Не виден');
}
jQuery.fn.view = function () {
'use strict';
if (!this.length) {
return false;
}
var docViewTop = $(window).scrollTop();
var docViewBottom = docViewTop + $(window).height();
var elemTop = this.offset().top;
var elemBottom = elemTop + this.height();
return ((docViewTop < elemTop) && (docViewBottom > elemBottom));
};
Простой шаблонизатор.
Выложил на GitHub https://github.com/jumper423/SimpleTemplate/
Пример шаблона
<ul class="eight columns">
<!-- BEGIN menu_row -->
<li>
<a href="{href}">
{text}
</a>
</li>
<!-- END menu_row -->
</ul>
Пример кода
$t->block_temlate(SITE_PATH . "templates/menu.html");
$t->set_var("href", 'index.php');
$t->set_var("text", 'Главная');
$t->parse("menu_row");
$t->set_var("href", 'string.php');
$t->set_var("text", 'Вещи');
$t->parse("menu_row");
$t->set_var("href", 'npc.php');
$t->set_var("text", 'NPC');
$t->parse("menu_row");
$t->set_var("href", 'market.php');
$t->set_var("text", 'Магазины');
$t->parse("menu_row");
$t->insert_block('menu');
<?php
namespace jumper423\SimpleTemplate;
/**
* Class SimpleTemplate
* @package jumper423\SimpleTemplate
*/
class SimpleTemplate
{
public $mainFields = [];
public $mainTemplate = [];
public $mainFile = null;
public $blockFields = [];
public $blockTemplate = [];
public $blockFile = null;
/**
* Задаём путь до главного шаблона
* @param $path
*/
public function mainTemplate($path)
{
$this->mainFile = file_get_contents($path);
preg_match_all('/{([^{}]*)}/', $this->blockFile, $matches);
if (count($matches[1]) > 0) {
//Проходимся по ним
foreach ($matches[1] as $marker) {
//Перестраиваем массив
$this->mainFields[$marker] = null;
}
}
}
/**
* Вставляем в метку главного шаблона текуший блок или строку
* @param $marker
* @param null $html
*/
public function insertBlock($marker, $html = null)
{
if (is_null($html)) {
$html = $this->blockOutput();
}
if (array_key_exists($marker, $this->mainFields)) {
$this->mainFields[$marker] .= $html; //Записываем получившийся html в метку
} else {
$this->mainFields[$marker] = $html; //Записываем получившийся html в метку
}
}
/**
* Задаём путь до блока
* @param $path
*/
public function blockTemplate($path)
{
$this->blockFile = file_get_contents($path);
while (preg_match('/<!-- BEGIN ([^BEGIN|END]*) -->([^BEGIN|END]*)\<!-- END ([^BEGIN|END]*) -->/', $this->blockFile, $matches)) {//Если есть строка со скобками в скоторой нет скобок, то записываем её в массив
$name = $matches[1];
$html = trim($matches[2]);
$this->blockTemplate[$name] = $html;
$this->blockFile = str_replace($matches[0], "{" . $name . "}", $this->blockFile);
}
}
/**
* Задаём знчение метки
* @param $field
* @param $value
*/
public function setVar($field, $value)
{
$this->blockFields[$field] = $value;
}
/**
* Парсим блок
* @param $block
*/
public function parse($block)
{
//достаём шаблон
$template = $this->blockTemplate[$block];
//Заменяем все метки
if (!array_key_exists($block, $this->blockFields)) {
$this->blockFields[$block] = '';
}
$this->blockFields[$block] .= $this->conversion($template, $this->blockFields); //Записываем получившийся html в метку
}
/**
* Блок
* @return string
*/
public function blockOutput()
{
$result = $this->conversion($this->blockFile, $this->blockFields);
unset($this->blockFile);
unset($this->blockTemplate);
unset($this->blockFields);
return $result;
}
/**
* Млаынй шаблон
* @param bool|true $view
* @return string
*/
public function mainOutput($view = true)
{
$result = $this->conversion($this->mainFile, $this->mainFields);
unset($this->mainFile);
unset($this->mainTemplate);
unset($this->mainFields);
if ($view) {
echo $result;
}
return $result;
}
/**
* @param string $template
* @param array $fields
* @return string
*/
private function conversion($template, $fields)
{
while (preg_match_all('/{([^{}]*)}/', $template, $matchesTags)) {
if (count($matchesTags[1]) > 0) {
//Проходимся по ним
foreach ($matchesTags[1] as $marker) {
//Перестраиваем массив
if (array_key_exists($marker, $fields)) {
$template = str_replace("{" . $marker . "}", $fields[$marker], $template);
} else {
$template = str_replace("{" . $marker . "}", null, $template);
}
}
}
}
return $template;
}
}
Пример шаблона: (Здравствуйте|Добрый день), Евгений.(| Сегодня (прекрасная|плохая|ужасная) погода, не так ли?| Как Вы (поживаете|себя чувствуете)?)
В круглых скобках(группах) фразы разделены символом |. Из группы выбирается одна случайная фраза. Группы могут содержать неограниченное количество подгрупп. Таким образом из примера-шаблона могут получиться лишь следующие фразы:
<?php
function strTemplate($enter)
{
while(preg_match_all('/\\(([^()]*)\\)/', $enter, $matches))//Если есть строка со скобками в скоторой нет скобок, то записываем её в массив
{
$list = explode("|",substr($matches[0][0], 1, strlen ($matches[0][0])-2));//массив вариантов
$enter = substr($enter, 0, strpos($enter, $matches[0][0])).$list[rand(0, substr_count(substr($matches[0][0], 1, strlen ($matches[0][0])-2),"|"))].substr($enter, strlen ($enter) - strrpos(strrev ($enter), strrev ($matches[0][0])));//собираем строку
}
echo $enter;
}
$a = strTemplate("(Здравствуйте|Добрый день), Евгений.(| Сегодня (прекрасная|плохая|ужасная) погода, не так ли?| Как Вы (поживаете|себя чувствуете)?)");
echo ($a);