Как стать автором
Обновить
70.38

PHP *

Скриптовый язык общего назначения

Сначала показывать
Период
Уровень сложности

В Sypex Geo добавлена привязка к API ВКонтакте

Время на прочтение3 мин
Количество просмотров8.2K
В Sypex Geo по просьбам трудящихся добавлена привязка к ID городов, регионов и стран, которые используются в API ВКонтакте.

Что такое и для чего нужен Sypex Geo


Sypex Geo одно из решений в области геолокации — определения географического положения (страны, города, региона) посетителя на основе IP-адреса. Используются собственный открытый формат бинарной базы данных, также доступен веб-сервис REST API, позволяющий всегда использовать самые свежие базы данных. Sypex Geo использует собственные базы данных, которые регулярно обновляются, так как местонахождение IP-адресов меняется (2 раза в месяц обновляются бесплатные базы данных, 4 раза в месяц коммерческие базы данных).

Примеры использования геолокации


  • Показывать посетителю контакты филиала из региона в котором находится посетитель.
  • В зависимости от города или региона посетителя интернет-магазин может показывать специальные предложения для данного региона
  • Фирма может устанавливать разные цены на товары и услуги, снижая цены для тех населенных пунктов, где сильны позиции конкурентов.
  • Проведение географического таргетинга при интернет-рекламе (контекстной, баннерной и т.д.).
  • Для посетителей из разных стран цены на товары и услуги могут быть указаны в разной валюте.
  • Посетители из разных стран могут быть перенаправлены на национальные зеркала основного сайта.
  • Проведение маркетинговых исследований.
Читать дальше →

Syringe — декларативный IoC Container на PHP

Время на прочтение3 мин
Количество просмотров7.1K
Инверсия управления (Inversion of Control) — важный принцип объектно-ориентированного программирования, используемый для уменьшения связанности в компьютерных программах (“Википедия”).

Простой как Pimple, мощный как Symfony DI


Syringe — простой IoC Container написанный на PHP с большим количеством возможностей и декларативной конфигурацией.

В нем реализованы: внедрение параметров, фабричные методы, основные виды инъекций, в том числе и через интерфейс, области видимости, внедрение тега и триггеры.

Далее возможности расписаны более подробно.
Читать дальше →

Kohana-form: beta релиз. Изменения и новшества

Время на прочтение2 мин
Количество просмотров4.9K
Здравствуйте. Наконец то настал тот день, когда модуль приобрел те очертания к которым я стремился. В связи с этим вышел beta релиз, и я бы хотел рассказать вам, что нового появилось в функционале kohana-form.

Первая статья — habrahabr.ru/post/216187

Читать дальше →

Удобная генерация URL (ЧПУ). Laravel 4 + сторонние пакеты

Время на прочтение10 мин
Количество просмотров23K
Хотелось бы поделиться удобными инструментами для генерации URL и примерами их использования.

Задача стоит не такая уж и большая, но она возникает постоянно, и хочется сократить время, затрачиваемое на написание велосипеда ее решение. Так же хочется избавиться от повсеместного использования вызовов разных классов, методов, функций и так далее при каждой необходимости сгенерировать URL. Ах да, я использую Laravel и инстументы заточены под него.

Ссылки на инструменты




Этого нам вполне хватит.

Постановка задачи


Автоматическая генерация уникальных URL для записей в таблицу БД для доступа к ним по /resource/unique-resource-url вместо /resource/1.
Читать дальше →

Создаем поведение (behavior) для Yii2

Время на прочтение7 мин
Количество просмотров81K
Часто, а на самом деле практически всегда, при создании сайта необходимо, чтобы страницы сайта открывались не по id сущности в базе, а по текстовому идентификатору, назовем его slug.

post/view/1 => post/view/testovaya-novost


(из url'а стоило бы убрать и view, но урок не о том)

Самым примитивным путем можно создать в таблице post поле slug, в модели Post соответственно появляется новый атрибут, в представление (view) добавляем новый input, в который ручками вбиваем slug.


<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;

/**
 * @var yii\web\View           $this
 * @var common\models\Post     $model
 * @var yii\widgets\ActiveForm $form
 */
?>

<div class="post-form">

	<?php $form = ActiveForm::begin(); ?>

	<?= $form->field( $model, 'name' )->textInput( [ 'maxlength' => 255 ] ) ?>
	<?= $form->field( $model, 'slug' )->textInput( [ 'maxlength' => 255 ] ) ?>
	<?= $form->field( $model, 'content' )->textarea( [ 'rows' => 6 ] ) ?>

	<div class="form-group">
		<?= Html::submitButton( $model->isNewRecord ? Yii::t( 'app', 'Create' ) : Yii::t( 'app', 'Update' ), [ 'class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary' ] ) ?>
	</div>

	<?php ActiveForm::end(); ?>

</div>


Читать дальше →

Плагин для Smarty — Combine

Время на прочтение2 мин
Количество просмотров5.7K
Плагин позволяет собрать несколько CSS или Javascript файлов воедино.

Я согласен, что подобных программных решений очень много, например Minify, YUI Compressor или конкантенатор из Pagespeed service от Google. Но для шаблонизатора Smarty мне подобного не попадалось, и я решил написать свое и попроще.
Combine
Плагин работает довольно просто: когда один из включаемых файлов изменяется, он создает новый выходной файл и возвращает к нему путь.
Читать дальше →

Использование ActiveRecord от Yii в игре тайм менеджере

Время на прочтение6 мин
Количество просмотров7.6K
Всем привет!

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

Напомню, что в проекте используется php(Yii), mysql и memcached. В проекте достаточно много сущностей, для каждой из которой есть своя модель, которая наследуется от CActiveRecord.

Хранятся файлы моделей следующим образом. В папке models создаем папку base. Когда генерируем модель через Gii, то указываем, что ее нужно положить в папку models/base и к имени класса добавляем Base. Затем создаем в models аналогичный класс без Base, который наследуется от базового класса и имеет в себе лишь метод model().

Кстати заранее скажу, что базовые модели наследуем не от CActiveRecord, а от ExtActiveRecord — расширяем CActiveRecord под наши нужды. Но об этом позже. Пока что разницы никакой.

Пример:
models/base/BaseUser.php — стандартный класс, который генерируется через Gii
models/User.php — класс, который наследуется от BaseUser и имеет в себе метод model()
	/**
	 * Returns the static model of the specified AR class.
	 * @param string $className active record class name.
	 * @return User the static model class
	 */
	public static function model($className=__CLASS__) {
		return parent::model($className);
	}
	



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

Не забываем добавить в конфиге 'application.models.base.*'.

Перейдем собственно к теме поста и поставим задачи, которые хотим решить:
  1. Уменьшить количество запросов в базу на обновление
  2. Уменьшить количество запросов в базу на выборку


Читать далее

Избавление Kohana ORM от лишних запросов к БД

Время на прочтение5 мин
Количество просмотров14K
ORM, несомненно, мощная и удобная вещь, но запросы генерируются не только не всегда оптимальные, но еще и лишние. При создании объекта модели ORM должен знать информацию о всех полях соответствующей таблицы БД. Что приводит к нежелательным запросам к БД.
Читать дальше →

HyperActive Record – недо-ORM на CodeIgniter

Время на прочтение4 мин
Количество просмотров5K

Общее описание


HyperActive Record – это надстройка над классом DB для фреймворка CodeIgniter 2.0 и выше, позволяющая получать значения полей связанных с записью объектов по внешним ключам (foreign keys) без дополнительного описания связей и данных. Такая недо-ORM
На гитхабе
Страница библиотеки
Зачем это надо и что оно умеет?

Отправляем SMS.ru с удобством

Время на прочтение7 мин
Количество просмотров7.3K
Было дело, проскакивала на хабре статься о сервисе sms.ru
Попробовал, работает. Понравилось. Тогда на этом дело и закончилось.
Но вот недавно потребовалось мне сделать отправку SMS подписавшимся клиентам. API на сайте сервиса хорошо документирован и приведены примеры, но не хватает удобства использования. В результате написал небольшой класс для взаимодействия с sms.ru.

Читать дальше →

PHP closures и передача аргументов по ссылке

Время на прочтение8 мин
Количество просмотров4K
Ради интереса я решил сделать механизм замыканий (closures) на PHP. Я знаю, что в PHP 5.3 такой механизм есть, поэтому подчёркиваю — чисто из академического интереса. И моя любознательность дала (по крайней мере, для меня — кто-то с этим уже мог иметь дело) свои плоды — помимо собственно замыканий я получил интересный метод передачи аргументов.

Читать дальше →

Нюансы сериализации

Время на прочтение1 мин
Количество просмотров2.5K
Думаю многим известны «магические» методы __sleep и __wakeup для управления сериализацией объектов.

Казалось бы все просто:
__sleep вызывается перед сериализацией чтоб можно было убрать ненужные связи (бд, мемкэш и тд).
__wakeup вызывается после unserialize, чтоб можно было автоматом необходимые связи вернуть в зад.

Но есть нюанс. Причем я сталкивался с ним раза 4 за последние 5 лет работы.
Читать дальше →

Мои плагины для Smarty. Часть 2

Время на прочтение7 мин
Количество просмотров5.1K
Учитывая наличие интереса к этой теме у сообщества, продолжаю знакомить со своими плагинами для Smarty. С первой частью можно ознакомиться здесь.
Читать дальше →

Ближайшие события

Парсим выдачу Яндекса

Время на прочтение10 мин
Количество просмотров39K
Приветствую всех читателей!

Я начал заниматься SEO недавно, и сразу же столкнулся с задачей определения позиций продвигаемых сайтов по ключевым словам в поисковиках. Задача тривиальная и решается на ура различным ПО, которое у всех SEO-специалистов на устах: Semonitor, AllSubmitter, etc. Помимо проприетарности, которой попахивает от всех подобного рода программ, в них есть, как это не парадоксально, ряд технических моментов, из-за которых хочется выбросить компьютер в окно.
Я бы не прочь купить Semonitor, но попользовав демо-версию, решил от этой идеи отказаться — на оф.сайте программы доступная для скачивания версия у меня глючила, требовала обновить себя, а после выпрошенного у меня обновления и вовсе отказывалась заниматься анализом позиций. Самому настроить, как Вы понимаете, нельзя.
AllSubmitter в этом плане получше, позволяет даже кастомизировать регулярные выражения для поисковиков, что вроде как делает этот софт устойчивым к смене формата выдачи, однако и с ним не все слава богу — когда 18.08.2008г. Яндекс вдруг изменил формат выдачи результатов поиска, вместе с тем поменяв и URL ссылок (возможно, эксперименты с вводом учета переходов, подробнее об этом писалось здесь), то и AllSub оказался бессилен. Правда, на следующий день Яндекс снова вернулся к старому формату выдачи, но прецедент, тем не менее, произошел.
Читать дальше →

Расширение файла средствами PHP

Время на прочтение2 мин
Количество просмотров102K
Получить расширение файла — не самая сложная задача. Но подходов к ее решению может быть несколько. Давайте попробуем рассмотреть несколько возможных вариантов и понять принципы их работы.

Считаете, что вопрос пустяковый и все тут просто как 2 пальца? Может быть, только недавно мне встретилась занятная бредострочка с толстенным регулярным выражением и все для того, что бы просто получить несколько символов в конце строки после последней точки. Зачем? Итак, начнем с пяти наиболее распространенных способов. Без использования регулярных выражений (только не подумайте, что я считаю их злом). Писать буду как просто и доступно, это не научная статья, а авторская заметка.
Поехали?

Нужен ли в PHP полноценный type hinting?

Время на прочтение1 мин
Количество просмотров2.8K
Относительно недавно был добавлен RFC (Request for comment) с предложеннием ввести type hinting. Обсуждение можно найти тут. В рассылке мнения различные: кто за, кто против, кто за строгую типизацию, кто за то, чтобы оставить все как есть. Как вы считаете, нужна ли такая функциональность в PHP?

Redirect or not to redirect…

Время на прочтение1 мин
Количество просмотров6.6K
Как вы считаете, при автоматической переадресации (например, при логине на сайт) давать ли пользователю ссылку на страницу, на которую он будет переадресован, или это необязательно? Какой вариант предпочтительнее?

Вариант 1:
header ("Location: www.sitename.dom/page");
exit();

Вариант 2:
echo '';
die ("Redirecting to this page…");


Лично я раньше считал, что вариант 2 — однозначно правильнее, так как браузер пользователя может не поддерживать автоматическую переадресацию. Теперь я уже сильно в этом сомневаюсь, потому что таких браузеров практически не осталось — может, ими просто пренебречь? Минусы второго варианта очевидны: чтобы пользователь успел что-то прочитать, нужно хотя бы секунды три подождать, а это — время. Если сделать переадресацию через 0 секунд, перед пользователем промелькнут какие-то слова — меня лично такой шум раздражает.

Как вы считаете? По собственному или чужому опыту.

Блог о CodeIgniter, перевод User Guide.

Время на прочтение1 мин
Количество просмотров1.7K
Недавно решил поизучать framework’и для PHP.
Решил изучать CodeIgniter, но столкнулся с проблемой — отсутствие какой-либо документации на русском языке.
Вот я и решил открыть блог посвященный CodeIgniter.
Для начала я собираюсь перевести user guide по CodeIgniter.
А там посмотрим)
Попробую сделать, что-то типо Введение в Zend Framework.

Адрес блога.

Кто может помочь с переводом, пожалуйста, обратитись ко мне. Можно по ХаброПочте.

Я думаю, если документация по одному из не плохих (как я думаю) framework'ов на php будет на русском языке, то удет хорошо.

Из легаси монолита в модульную архитектуру: проводим рефакторинг и наводим порядок в проекте

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров1.9K

Привет, Хабр! Меня зовут Владимир Раду, я Backend-разработчик в Рунити. Однажды мы с командой встали перед дилеммой: как навести порядок внутри монолита. Админка одного из сайтов нашей группы компаний — большой и довольно возрастной проект. Он охватывает множество задач и сценариев: от управления ценами до редактирования контента. Со временем стало очевидно, что нужно снижать связанность компонентов и разводить бизнес-части. Так появилась идея перейти к модульной архитектуре.

Внутри о том, что у нас получилось из рефакторинга легаси, как мы выстраивали работу с модулями и объединяли в логичную структуру разрозненные части системы. Будет полезно разработчикам, которые работают с легаси и хотят встать на путь оптимизации проекта — без переписывания с нуля.

Читать далее

Пишем тесты для php backend приложений

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров3.7K

Статья нацелена в первую очередь на PHP backend-разработчиков уровня junior/middle, чтобы познакомить с теорией, которую спрашивают на собеседованиях, и с практическими примерами/советами, полезными для разработки.

Здесь хочу рассказать зачем вообще тестировать код, какие инструменты использовать, какие есть паттерны и тп.

Читать далее