Статьи
Чеклист для начинающего seo специалиста
Небольшой чек лист перед оптимизацией сайта:
1. Главное зеркало
2. Аффилиаты
3. Проверка индексирования
4. Выявление мусора
5. Отсутствие дублей
6. Поиск битых ссылок
7. Валидация кода
8. Проверка контента на уникальность
9. Наличие правильно настроенного robots.txt
10. Наличие sitemap.xml
11. Уникальность внутри title, h1-6, мета тегов
12. Структура ЧПУ
13. Ответы сервера, скорость загрузки сайта
14. Технические блоки контента
15. Хостинг
Список можно добавлять своими пунктами.
Включаем gzip сжатие в nginx
Долго разбирался со сжатием в nginx и все никак не хотело работало:
gzip on; gzip_disable "msie6"; gzip_static off; gzip_vary on; gzip_proxied any; gzip_comp_level 4; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/xml+rss text/javascript; gzip_min_length 1024;
Не работало из за того, что версия протокола была 1.0, а сжатие работает только на 1.1:
gzip_http_version 1.1;
Как поменять суффиксы html на htm Joomla
Ничего сложного, достаточно пару изменений в файле \includes\router.php
$uri->getVar('format', 'htm')
И закоментировать строчку
//$vars['format'] = $suffix;
Далее в файле .htaccess изменить
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html|htm?|feed|pdf|vcf|raw))$ [NC]
Настройка связки Nginx+Apache с PHP5, MySQL на Ubuntu
На днях познакомился с одной интересной статьей и решил ее репостнуть на сайт.
Источник: http://howitmake.ru/blog/ubuntu/42.html
Общая схема работы такая:
Все запросы приходят на сервер Nginx -он отдает статические данные (изображения (jpg, png, html и т.п.), далее он передает запрос на обработку скриптов WEB серверу Apache (PHP,cgi,pl и т.п.), скрипты выполняют запросы к MySQL и получив оттуда данные, возвращают их Nginx, тот, в свою очередь, отдает готовую страницу пользователям. Все просто. Данный мануал подходит для всех версий Ubuntu и Debian!
Введение в Symfony Framework основы
Symfony — это один из тех фреймворков на PHP5, который привлекает своей достаточной документацией, множеством плагинов, обновлениями, анонсами новых версий и многим другим. имхо тут нечего больше добавить.
Введение
Сразу хочу отметить, что статья не тянет на учебное пособие или руководсво для новичков в PHP, потому что фреймворк досточно сложный, но интересный (: Как говориться, путь осилит идущий.
Валидация Email с проверкой MX-записи домена
Используя symfony с ORM Doctrine, возникла необходимость проверки e-mail'a в форме, но обычного sfValidatorEmail не достаточно, т.к. если в модели данных Doctrine поле email объявлено с валидатором «email: true» оно проверяется самой Doctrine на наличие MX-записи домена и если ее нет — выбрасывает эксепшн. Согласитесь, это не красиво(: Пользователь вводит регистрационные данные и фейковый почтовый адрес, удовлетворяющий шаблону, и получает в ответ «500 Inernal Server Error». Для корректной обработки фейковых адресов я сделал свой валидатор sfValidatorEmailMx, который наследует стандартный валидатор sfValidatorEmail добавляя проверку MX-записи домена, если записей нет — вызыдает ошибку «mx_error» и именем домена в поле %domain%. Код валидатора (lib/validator/sfValidatorEmailMx.class.php):
Антипаттерны Symfony
Антипаттерны Symfony
Я не очень люблю слово «антипаттерны», так же как и «паттерны». По мне, это чересчур заумные слова для обозначения довольно простых по своей сути идей. И тем не менее, ниже я намереваюсь поведать о самых частых антипаттернах при использовании PHP-фреймворка Symfony (версий 1.2 и 1.3/1.4). То есть о том, как программировать по-хорошему бы не надо, но по незнанию либо лени как-то само получается.
Все ниженаписанное навеяно примерно полугодовым опытом работы в веб-студии, активно использующей Symfony для всех проектов с 2008 года.
Осторожно, многабукав. Пост про быдлокодерство, кому неинтересно, можете смело пропускать :)
Symfony 1.2: решение проблемы загрузки flv файлов в админке
В Symfony есть одна неприятная проблемка. Если попытаться залить файлы .flv в админке, то после того как файл запишется на диск, мы получим расширение файла в виде: .exe и .obj, . В предыдущей версии Symfony 1.1 это решалось перекрытием методов в actions.class.php, и исправлениями других файлов. Конечно проблему это решило, но её реализация была так себе. В новой версии решил написать по другому и получилось все очень просто. Почему так происходит? При загрузке .flv файлов они определяться как application/octet-stream, а в Symfony это как раз тип файлов .exe. Поэтому создаем свой myValidatorFile, который наследует sfValidatorFile и решает проблему.
Установка symfony
Итак, в первую очередь нам понадобится платформа для установки symfony, а именно: сервер Apache, сервер БД вроде MySQL, SQLite и интерпретатор PHP версии 5.2.4 или более новый. При установке на платформу Windows наиболее удобным для разработки, на мой взгляд, является уже собранный сервер WAMP (www.wampserver.com/en/). Скачиваем его и устанавливаем. Стоит внести путь к бинарнику php в переменные окружения. Для этого в свойствах системы в закладке “Дополнительно” нужно открыть “Переменные среды”. В переменную Path дописать, через точку с запятой, путь к файлу php.exe например C:\wamp\bin\php\php5.2.9-1\php.exe). Хотя в сети еще куча сборок:
- Денвер
- xampp
- Собрать свою =)
Теперь стоит сказать о трех способах установки библиотек symfony.
Печать страниц сайта под управлением symfony
Наверняка кто-то из программистов недоумевает, что происходит с их сайтом при попытке печати под управлением symfony. Верстка разъезжается в разные стороны, а стили вроде бы подключены. В чем же дело? Я сам ломал голову пару часов до тех пор, пока не посмотрел сорс страницы и не увидел что symfony автоматически добавляет атрибут media.
Используем symfony вне проекта
Для того чтобы использовать функции симфони вне проекта нам необходимо подключить классы сифони:
require_once 'путь_до_библиотек/lib/autoload/sfCoreAutoload.class.php';
sfCoreAutoload::register();
Дальше уже можем читать данные из yml:
Шпаргалки по симфони
Наверно, у каждого разработчика есть свой список шпор, хочу поделиться своим списком. Как получить Параметр Запроса Напрямую из Шаблона
get('name') ?>
Проверка Существования Параметра Запроса в Шаблоне
has('name')): ?>
Hello, get('name') ?>!
Hello, John Doe!
Очистить кэш для другого application из action в Symfony
Решение:
sfContext::switchTo('frontend'); //переключение на application в котором надо очистиь кэш
sfContext::getInstance()->getViewCacheManager()->getCache()->clean(sfCache::ALL);
sfContext::switchTo('backend'); // переключение обратно
Отличие renderPartial от getPartial в Symfony
Исходный код обоих методов
// sfAction.class.php
public function renderPartial($templateName, $vars = null)
{
return $this->renderText($this->getPartial($templateName, $vars));
}
...
...
public function getPartial($templateName, $vars = null)
{
$this->getContext()->getConfiguration()->loadHelpers('Partial');
$vars = !is_null($vars) ? $vars : $this->varHolder->getAll();
return get_partial($templateName, $vars);
}
Symfony не очищает переменные в сессии, когда истекло её время жизни
Когда пользователь логиниться, обычно в сессию добавляются какие-то параметры, например имя, фамилия, всё что угодно, делается это так:
#apps/frontend/lib/myUser.class.php
...
public function authenticate($user = null)
{
$this->setAuthenticated(true);
$this->setAttribute('username', $user->getUsername());
...
}
...