cms

Подписаться на эту метку по RSS

Данная заметка несколько не отвечает моим требованиям к собственным материалам, она родилась из темы на официальном форуме Maxsite CMS и переписывать поэтому я её не буду. Тема форума безосновательно критикует систему управления. Сделаю то, что умею делать достаточно хорошо - покажу в чём автор заблуждается. Давно работаю с ЦМС в том числе Макса. Тем более это кто-то сделать должен.

Вывод? Да, в погоне за лучшим кодом и сериями серверного софта MaxSite CMS подходит все меньше и меньше под минимальные требования (не SQL>4.0.хх PHP>4.хх, а мы давай врубим SQL PHP версии не меньше 100хх? )
А почему вы не используете CGI или не пишите сайты на голом HTML? Думаю ответ очевиден. На сегодня нельзя сохранять всю линейку совместимости. У вас просто устаревший хостинг. Кроме того системные требования во многом диктует фреймворк. К плагинам это не относится, но авторы плагинов к разработчику ЦМС обычно отношения не имеют.

Переделывая тему под себя, я проклял все! Потому что, оказывается, мне надо выучить ОСОБУЮ разметку в шаблонах MaxSite CMS, и на основе заготовки начать создавать свой.
Открою пару секретов - шаблон надо делать самому и не копаться в чужом коде. В системе аж три учебных шаблона, разного уровня сложности. Остальное делать задача других разработчиков. И самое интересное и важное! Особая разметка представляете PHP и HTML... И да. Чтобы сделать сайт их как-то надо выучить...

Попробовав поискать готовые, я столкнулся с тем, что все шаблоны, как под копирку, повторяют один! Как будто нет другого дизайна, кроме поля текста и меню справа!
Плохо искали. Ну и снова совет - сделай сам на основе бесплатных. Логика там простейшая, почитай лекции Макса, посмотри готовые работы. Или можешь заказать, обычно это не сложно и не дорого. Например мне. Да это самореклама...

Программисты, не надо человеку инструкцию, ему надо пример, который чуть переделать и он работает!
Обычно программированием занимаются программисты как ни странно. Пример который работает это вордпресс. Он коряв дыряв и не годится для серьёзных разработок. Но простому пользователю подойдёт. Нужно смотреть по месту что дешевле, сделать один раз оптимальный сайт или делать на том же вордпрессе самому и отдавать за выделенный сервер каждый месяц. Всё зависит от задач, которые будет решать сайт. Кстати проконсультироваться по этому вопросу можно обратиться ко мне.

А куда? В виджет текста! А он один. А мне минимум на одно меню два разных таких виджета для нормального оформления нужно!
Вы не разобрались в работе виджетов - советую читать лекции и инструкции. Повторять как сюда не буду, обсуждалось несколько раз. Новички - пользуйтесь поиском а? Ну по хорошему просимо...

Дизайн, людей, поддерживающих форум (ответы в виде, измени такой то код на такой то вообще не должны быть!!! Значит, продукт не сырой, а мокрющий :)и думать, как улучшить MaxSite CMS. Потому что ВСЕ, ПРЕДЕЛ, ТУПИК, ПОТОЛОК кодинга для этой CMS!
На форуме тебе подскажут алгоритм, который поможет решить задачу, а дальше любой может засунуть в плагин его или внедрить как-то иначе... С такой гибкой системой предела в принципе нет. У меня дошло до того, что мне проще проверять простые алгоритмы на этой системе, настроенной определённым образом - хорошая оболочка для теста скриптов. Повторяю. Вы не разобрались в системе, а делаете вывод. Нехорошо!

Тысячи уже таких, и тысячи проектов загинаются!Сила в красоте, в рекламе, в простоте установки! (WordPress то же..)
Просто разная целевая аудитория. Если сайт красив но не грузится он ничего не стоит. Про тысячи конечно преувеличение, про загибается тоже. Система заточена под разработчиков. Сделать нужно многое, но это не указанное вами. А например удобный мультизагрузчик файлов интегрированный в редактор (но не как в ВП!!).

И наконец пожелание! Развивайтесь, учитесь программировать, повышайте квалификацию. Не нужно искать косяки в разработчиках плагинов и ЦМС. Перспективы у вас думаю есть, продолжайте работать и всё получится и код будет доставлять радость. Удачи!

Подробнее о MultiMaxsite CMS

Среда, 17 марта 2010 г.
Рубрика: Сайтостроительство
Метки: |

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

Итак. Для чего? Допустим мы хотим установить много копий MaxSite CMS. Разумеется хотим обойтись одной базой данных и одной копией самой системы, домены привязываются к одной папке. Это удешевляет хостинг в принципе, но не снимает ограничений по нагрузке на него.

Устанавливая данный хак мы получаем: только одну копию Maxsite CMS на диске у хостера. Все домены линкуются к одной папке. В зависимости от доменного имени, идёт обращение к определённым таблицам в базе данных. Так как делается это на этапе до запуска самого движка, ни пользователь, ни администратор даже не заметят разницы работая с многосайтовой или обычной версией системы.

Что получается в базе данных? Макссайт создаёт около десятка таблиц для хранения данных одного сайта вида mso_table. Многосайтовая версия в рамках одной же базы данных создаст n помноженное на дюжину таблиц, где n это количество сайтов. небольшое захламление получается, зато великая экономия... Опыт показывает, что одиннадцать сайтов нормально работают. Правда у них небольшая посещаемость...

По привязке доменов - можно использовать парковку к главному домену. Можно также привязывать и субдомены, проблем не будет.

Структура базы данных - используются префиксы вида railway$club_org_ru, если ваш домен это railway-club.org.ru. Такие косяки, позволяют добиться однозначного соответствия. У людей были проблемы, когда просто удалялись точки и тире из домена.

После запуска, нужно также создать папку для сайта в категории site, а в ней каталоги uploads, cache. Файл sitemap.xml для карты сайта. Права выставляются так же как и у стандартных каталогов. Это как правило (777).

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

Проверка регистрационных данных

Воскресенье, 6 декабря 2009 г.
Рубрика: Сайтостроительство
Метки: | |

Часть функций, их основа честно откуда-то спёрта. Мне не удалось разыскать источник поэтому выложу в открытый доступ. Функции для проверки регистрационных данных комъюзеров.

Функция проверки на существование мыла в таблице пользователей.

function is_email_exists($email)
{
$ret = false;
$CI = &get_instance();
$CI->db->from('users');
$CI->db->select('users_email');
$CI->db->limit(1);
$CI->db->where( array('users_email' => $email));
$query = $CI->db->get();
if( $query->num_rows() )
{
$row = $query->row();
if( $row->users_email == $email ) $ret = true;
}
return $ret;
}

Получение ИДа пользователя по его нику.

function get_id_by_nik($name)
{
$ret = true;
$id = 0;
$CI = &get_instance();
$CI->db->from('comusers');
$CI->db->select('comusers_id');
$CI->db->limit(1);
$CI->db->where( array('comusers_nik' => $name));
$query = $CI->db->get();
if( $query->num_rows() )
{
$row = $query->row();
$id = $row->comusers_id;
}
return (int) $id;
}
Проверка на существование логина юзера

function is_users_login($login)
{
$ret = true;
$CI = &get_instance();
$CI->db->from('users');
$CI->db->select('users_login');
$CI->db->limit(1);
$CI->db->where( array('users_login' => $login));
$query = $CI->db->get();
if( $query->num_rows() )
{
$row = $query->row();
if( $row->users_login == $login )
{
$ret = false;
}
else
{
$ret = true;
}
}
return $ret;
}
Проверка на существование ника пользователя

function is_users_nik($login)
{
$ret = true;
$CI = &get_instance();
$CI->db->from('users');
$CI->db->select('users_nik');
$CI->db->limit(1);
$CI->db->where( array('users_nik' => $login) );
$query = $CI->db->get();
if( $query->num_rows() )
{
$row = $query->row();
if( $row->users_nik == $login )
{
$ret = false;
}
else
{
$ret = true;
}
}
return $ret;
}
Проверка на существование ника комъюзера

function is_comusers_nik($login, $userid)
{
$ret = true;
$CI = &get_instance();
$CI->db->from('comusers');
$CI->db->select('comusers_nik');
$CI->db->limit(1);
$CI->db->where( array('comusers_nik' => $login) );
$query = $CI->db->get();
if( $query->num_rows() )
{
$row = $query->row();
if ( ( $row->comusers_nik == $login ) and
( get_id_by_nik($row->comusers_nik) != $userid ) and ( $row->comusers_nik!='' ) )
{
$ret = false;
}
else
{
$ret = true;
}
}
return $ret;
}

Функция, которую нужно вызывать в файле your-template/type/users-form.php вместо стандартной $res_post=mso_comuser_edit(); нужно выполнить присваивание $res_post=russ_mso_comuser_edit();

function russ_mso_comuser_edit($args = array())
{
global $MSO;
if ( !isset($args['css_ok']) ) $args['css_ok'] = 'comment-ok';
if ( !isset($args['css_error']) ) $args['css_error'] = 'comment-error';
# id комюзера, который в сессии
if ( isset($MSO->data['session']['comuser']) and $MSO->data['session']['comuser'] )
$id_session = $MSO->data['session']['comuser']['comusers_id'];
else $id_session = false;
if ( $post = mso_check_post(array('f_session_id', 'f_submit', 'f_comusers_activate_key')) ) // это активация
{
# защита рефера
mso_checkreferer();
# защита сессии - если не нужно закомментировать строчку!
if ($MSO->data['session']['session_id'] != $post['f_session_id']) mso_redirect();
// получаем номер юзера id из f_submit[]
$id = (int) mso_array_get_key($post['f_submit']);
if (!$id) return '
'. t('Ошибочный номер пользователя'). '
';
# проверяем id в сессии с сабмитом
if ($id != $id_session)
return '
'. t('Ошибочный номер пользователя'). '
';

$f_comusers_activate_key = trim($post['f_comusers_activate_key']);
if (!$f_comusers_activate_key) return '
'. t('Неверный (пустой) ключ'). '
';
// нужно проверить если у указанного комюзера не равные ключи
// если они равны, то ничего не делаем
$CI = & get_instance();
$CI->db->select('comusers_activate_string, comusers_activate_key');
$CI->db->from('comusers');
$CI->db->where('comusers_id', $id);
$CI->db->limit(1);
$query = $CI->db->get();
if ($query->num_rows() > 0)
{
$comuser = $query->result_array(); // данные комюзера
if ($comuser[0]['comusers_activate_string'] == $comuser[0]['comusers_activate_key'])
{
// уже равны, активация не требуется
return '
'. t('Активация уже выполнена'). '
';
}
else
{
// ключи в базе не равны
// сверяем с переданным ключом из формы
if ($f_comusers_activate_key == $comuser[0]['comusers_activate_key'])
{
// верный ключ - обновляем в базе
$CI->db->where('comusers_id', $id);
$res = ($CI->db->update('comusers',
array ('comusers_activate_string' => $f_comusers_activate_key ) )) ? '1' : '0';
$CI->db->cache_delete_all();
if ($res)
return '
'. t('Активация выполнена!'). '
';
else
return '
'. t('Ошибка БД при добавления ключа активации'). '
';
}
else
{
return '
'. t('Ошибочный ключ активации'). '
';
}
}
}
else // вообще нет такого комюзера
return '
'. t('Ошибочный номер пользователя'). '
';
}
elseif ( $post = mso_check_post(array('flogin_session_id', 'flogin_submit', 'flogin_user', 'flogin_password',
'flogin_redirect')) )
{
// логинимся через стандартную _mso_login()
_mso_login();
return;
}

// это форма?
elseif ( $post = mso_check_post(array('f_session_id', 'f_submit', 'f_comusers_email', 'f_comusers_password',
'f_comusers_nik', 'f_comusers_url', 'f_comusers_icq', 'f_comusers_msn', 'f_comusers_jaber',
'f_comusers_date_birth', 'f_comusers_description', 'f_comusers_avatar_url')) ) // это обновление формы
{
if (!is_login_comuser())
return '
'. t('Ошибочные данные пользователя'). '
';

# защита рефера
mso_checkreferer();
# защита сессии - если не нужно закомментировать строчку!
if ($MSO->data['session']['session_id'] != $post['f_session_id']) mso_redirect();
// получаем номер юзера id из f_submit[]
$id = (int) mso_array_get_key($post['f_submit']);
if (!$id) return '
'. t('Ошибочный номер пользователя'). '
';
# проверяем id в сессии с сабмитом
if ($id != $id_session)
return '
'. t('Ошибочный номер пользователя'). '
';


$f_comusers_email = trim($post['f_comusers_email']);
$f_comusers_password = trim($post['f_comusers_password']);
if (!$f_comusers_email or !$f_comusers_password)
return '
'. t('Необходимо указать email и пароль'). '
';

// проверим есть ли такой комюзер
$CI = & get_instance();
$CI->db->select('*');
$CI->db->from('comusers');

# CodeIgniter экранирует where, даже когда только условия в полях
$CI->db->where('comusers_activate_string=comusers_activate_key', '', false); // активация должна уже быть

$CI->db->where(array('comusers_id'=>$id,
'comusers_email'=>$f_comusers_email,
'comusers_password'=>$f_comusers_password
));
$CI->db->limit(1);
$query = $CI->db->get();
if ($query->num_rows() > 0)
{
// все ок - логин пароль верные
$comuser = $query->result_array(); // данные комюзера
$f_comusers_avatar_url = mso_strip($post['f_comusers_avatar_url'], false,
array('\\', '|', '?', '%', '*', '`'));
$allowed_ext = array('gif', 'jpg', 'jpeg', 'png'); // разрешенные типы
$ext = strtolower(str_replace('.', '', strrchr($f_comusers_avatar_url, '.'))); // расширение файла
if ( !in_array($ext, $allowed_ext) ) $f_comusers_avatar_url = ''; // запрещенный тип файла

if (!isset($post['f_comusers_notify'])) $post['f_comusers_notify'] = 0;

if ( !( is_users_login($post['f_comusers_nik']) and is_comusers_nik($post['f_comusers_nik'], $id) and is_users_nik($post['f_comusers_nik']) ) )
return '
'. t('Необходимо указать правильный ник'). '
';
$upd_date = array (
'comusers_nik' => strip_tags($post['f_comusers_nik']),
'comusers_url' => strip_tags($post['f_comusers_url']),
'comusers_icq' => strip_tags($post['f_comusers_icq']),
'comusers_msn' => strip_tags($post['f_comusers_msn']),
'comusers_jaber' => strip_tags($post['f_comusers_jaber']),
'comusers_date_birth' => strip_tags($post['f_comusers_date_birth']),
'comusers_description' => strip_tags($post['f_comusers_description']),
'comusers_avatar_url' => $f_comusers_avatar_url,
'comusers_notify' => $post['f_comusers_notify'],

);

# pr($upd_date );
$CI->db->where('comusers_id', $id);
$res = ($CI->db->update('comusers', $upd_date )) ? '1' : '0';
$CI->db->cache_delete_all();
// mso_flush_cache(); // сбросим кэш

if ($res)
return '
'. t('Обновление выполнено!'). '
';
else
return '
'. t('Ошибка БД при обновлении'). '
';
}
else return '
'. t('Ошибочный email и пароль'). '
';
} // обновление формы
}
Изменений минимум, но они касаются именно проверок. При обновлении Максом данной функции следует вносить изменения и в эту. На данный момент она предназначена для версии 0.34. Хотя не думаю, что будут изменения в будущем.

МаксМногосайт v. 0.2

Четверг, 19 ноября 2009 г.
Рубрика: Сайтостроительство
Метки: | |

Приветствую! Много времени прошло с публикации первой части многосайтового расширения для MaxSite CMS. Думаю интересно оно осталось только мне, что в принципе неудивительно. В любом случае решил выложить следующую версию. Основные изменения связаны с изменениями самой MaxSite. Кроме того, перенёс папки с сайтами (шаблонами) в отдельную директорию в корне.

Для установки:

  • Изменить настройки в /application/config/database.php - настройки базы данных.
  • Изменить настройки в /application/maxsite/mso-config.php - секретная фраза.
  • В папке (папках) вида /site/domain_ru/ поставить разрешения на запись в каталогах uploads, cache и файле sitemap.xml
  • По необходимости добавить из последней сборки шаблон default.
  • Устанавливать всегда поверх сборки. Перезаписывается плагин xml_sitemap (что плохо, не спорю)
  • Совсем забыл! Хотя из исходников всё очевидно, но всё же. Структура базы данных - используются префиксы вида railway$club_org_ru, если ваш домен это railway-club.org.ru. Такие косяки, позволяют добиться однозначного соответствия. У людей были проблемы, когда просто удалялись точки и тире из домена.
В общем планирую заняться плотнее. Так редко выходят обновления, ибо до выхода версии 0.35 меня устраивала старая сборка. Теперь она не работает. А эта вроде бы работает только с 0.35...

Прямая ссылка на скачивание multi_maxsite_0_2.zip 0

Закладочник на Jquery для MaxSite CMS

Понедельник, 17 августа 2009 г.
Рубрика: Сайтостроительство
Метки: | |

Приветствую! Создал свой первый плагин для MaxSite CMS. Он генерирует список ссылок для добавления страницы в социальные сервисы, закладки. К слову для MaxSite уже создано два подобных плагина. Это стандартный addzakl и недавно представленный плагин от Алексея (http://driverlab.ru). Собственно очень даже неплохие и даже отличные простые решения. Чем они меня не устраивают? Да ничем. Но есть красивое решение для создания таких кнопок от dimox'a (http://dimox.name). Дмитрий использует библиотеку Jquery. Я взял за основу данный скрипт, адаптировал его к MaxSite и добавил администраторские возможности из скрипта Алексея. То что получилось можно взять по нижеследующей ссылке, а также оценить в работе на этом сайте.

bookmarks_jquery.zip 0

Сегодня, 22 августа случайно обнаружил несовместимость данного плагина с lightbox'ом и colorbox'ом. Выглядит таким образом: меню плагина не раскрывается, галерея не выводит окна с картинкой. В общем если поставить разом - убивают друг друга.:) Решил найти проблему. Отключал по очереди вызовы некоторых процедур в этом плагине. Помогает только полное удаление файла jqsocial.js. Ошибка нашлась неожиданно и совершенно случайно. Файрбаг зафиксировал такое вот дело:

При включённом lightbox'e: $ is not a function $('div.gallery a').lightBox({

При включённом colorbox'e: $ is not a function $(".gallery,.slideshow").find("a[href$='.jpg'],a[href$='.jpeg'],a[href$='.png']...

Что с этим счастьем делать не знаю, по идее ошибка у разработчиков lightbox'ов, без них ошибок не наблюдается.

В любом случае разбираться самостоятельно не буду... Толку не будет. Даже не могу понять где искать ошибки. Однако если добрые люди подскажут, что нужно сделать и переделать, чтобы ошибки не возникали - всегда готов.

МаксМногосайт v. 0.1

Пятница, 15 мая 2009 г.
Рубрика: Сайтостроительство
Метки: | |

А вот и обещанная ссылка на скачивание.

Ни в коем случае не ставьте сразу на рабочий сайт! Я конечно всё протестировал, но лучше проверьте как заработает.

Наипервейшая и наипростейшая версия. Надеюсь будет развиваться... Есть к чему стремиться! Качайте! Ах да - на винде не тестировал.

Вводная МаксМногосайт

Четверг, 14 мая 2009 г.
Рубрика: Сайтостроительство
Метки: |

Приветствую друзья!

Вот наконец дошли руки собрать воедино то, о чём я давно уже рассказывал. А именно многосайтовую модификацию для MaxSite CMS. В следующей заметке будет дана ссылка на скачивание, а сейчас хочу рассказать о некоторых особенностях модификации.

  • Первое, оно же главное: всё сделано в наиболее упрощённом виде. Как уже говорил, для того, чтобы обновления самой системы, по возможности, не затрагивали модификацию.
  • Второе: небольшое количество файлов в скачанном архиве. Следует из первого пункта. Разброс по папкам для наиболее простой установки. Вы просто копируете файлы в корень сайта и наслаждаетесь эффектом.
  • Третье: в файлах по паре строк добавленного кода. Истина в простоте ;-) Действительно, всё очень просто!
Значит так! Раз всё просто, зачем я выкладываю модификацию? Не всем это кажется простым. Да и это небольшой костыль, который позволит экономить время на обновление системы.

Из недостатков:

  • База данных засоряется! Многовато записей, дублируется кое-что. Да и не уверен что даже 20+ сайтов оно потянет... хотя кто знает?
  • Изменены файлы плагина xml-sitemap. Теперь карта сайта расположена не в корне, а в шаблоне. Соответственно права на запись надо выставить вручную...
  • Общий доступ к upload
  • Общие ушки. Даже не знаю недостаток ли...
Вот так! Инструкция:
  • Распаковываем на сервер MaxSite CMS
  • Качаем самый новый архив с модификацией.
  • Распаковываем в корень сайта с заменой существующих файлов.
  • Прописываем логин-пароль к базе в соответствующем файле. (application\config\database.php)
  • Берём нужный шаблон для сайта. Папку переименовываем  так: наш сайт site.ru, папка site_ru
  • В папку копируем sitemap.xml. Ставим права на запись.
Всё должно заработать. Устанавливаем MaxSite CMS. Как сделать с уже работающим сайтом расскажу, если потребуется. Напутствие: не стоит делать с рабочим сайтом, если не уверены как и почему это работает. Сначала поэкспериментируйте. А то потом будут каменты: почему мой блог лежит и т.д. :) Позже будут более совершенные версии. И ещё: претензии к модификации буду нещадно удалять, а вот здоровая критика очень даже привтествуется. Надеюсь хоть кто-то обратит внимание на данное решение.

МногоСайтовый MaxSite: sitemap

Пятница, 1 мая 2009 г.
Рубрика: Сайтостроительство
Метки: |

Приветствую! Вчера под конец дня у меня родилась идея. Всё по теме MaxSite МногоСайт. А именно о вынесении в папку шаблона файла sitemap.xml. Как это было реализовано я сейчас и напишу.

Я решил воспользоваться уже известной мне схемой: через наш любимый Mod Rewrite ;-) - прописываем в .htaccess такую строчку:

  • RewriteRule ^sitemap.xml$ http://%{HTTP_HOST}/sitemap.php 
  • RewriteRule ^sitemap.xml$ /sitemap.php
И ещё изменить
  • RewriteCond $1 !^(index\.php|uploads|robots\.txt|favicon\.ico)
На
  • RewriteCond $1 !^(index\.php|uploads|robots\.txt|sitemap\.xml|favicon\.ico)
Это перенаправление с sitemap.xml на sitemap.php. Как и с robots.txt идея та же. Нужно перенаправить поисковик со статического файла на файл скрипта, который успешно и динамически сформирует нам нужную структуру.

Сам файл выглядит похитрее, чем robots.php:

  • <?php
  • $hostway=str_replace('.','_',$_SERVER['HTTP_HOST']);
  • $hostway='./application/maxsite/templates/'.$hostway.'/sitemap.xml';
  • header("Content-type: application/xml");
  • echo file_get_contents($hostway);
  • ?>
Сначала мы берём строчку с хостом сайта и заменяем точку на символ подчёркивания. Затем формируем путь к шаблону. Заметьте: папку шаблона придётся переименовать примерно в такую - askname_ru. Можно конечно сделать хитрый скрипт, дабы избежать этого... Но мне лень да и смысла не вижу... При смене шаблона просто переименовываем папку и все дела. После формирования пути отправим заголовок, что тип страницы - xml. Мы ведь карту сайта формируем да? :-) Ну и наконец выводим то, что лежит у нас по адресу тырыпыры/шаблон/sitemap.xml.

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

  • $hostway=str_replace('.','_',$_SERVER['HTTP_HOST']);
  • $hostway='/application/maxsite/templates/'.$hostway.'/sitemap.xml';
  • $fn = realpath(dirname(FCPATH)).$hostway;
Это нужно вписать вместо оператора присваивания переменной $fn. По умолчанию она сливает файл в корень. После этих преобразований, можно отказаться от идеи отдельной папки для каждого сайта и делать по принципу: один сайт - один шаблон.

Ну вот пожалуй и всё. Хочу так же обрадовать: скоро выпущу дополнение для преобразования в многосайтовую систему. Думаю это нужно сделать, по структуре будет примерно так: ставите MaxSite, поверх льёте мои труды и на выходе у вас многосайтовая система. Наверное за выходные сделаю пробную бету ;-)

MaxSite МногоСайт? Продолжение...

Четверг, 30 апреля 2009 г.
Рубрика: Сайтостроительство
Метки: | |

Приветствую!

Сегодня расскажу о некоторых подробностях превращения MaxSite CMS в многосайтовую систему. Собственно продолжу рассказ.

Мои попытки сделать общую админ-панель провалились даже не начавшись. Плохо ли, хорошо ли... Решил не заморачиваться, когда понял, что практической пользы и удобства минимум, а кроить систему придётся основательнее чем думал ранее.

Итак, сегодня расскажу, как сделать скрипты для динамического вывода файлов sitemap.xml и robots.txt, первый - карта сайта, второй - инструкции индексации.

Начну, пожалуй с sitemap.xml: поначалу долго мучался как сделать, потом допёрло: создаём в корневой директории папку, в ней ещё одну с названием сайта. Будет что-то типа http://AskName.ru/folder/AskName.ru/ В неё засовываем наш sitemap.xml. Далее нам нужно подправить плагин Макса (путь на сайте /application/maxsite/plugins/xml_sitemap/index.php). В самом конце файла меняем строчку:

  • $fn = realpath(dirname(FCPATH)).'/sitemap.xml';
На такую:
  • $fn=realpath(dirname(FCPATH)).'/folder/'.$_SERVER['HTTP_HOST'].'/sitemap.xml';
После этого ваш sitemap.xml будет лежать по примерно такому адресу: http://AskName.ru/folder/AskName.ru/

Как вариант можно сделать с помощью Mod Rewrite перенаправления так, чтобы поисковик думал, что он лежит в корневой папке сервера, но я пошёл по другому пути и поэтому мы рассмотрим способ динамического создания файла robots.txt

В корневой директории нужно создать файл robots.php, так как нам нет смысла делать разные robots.txt для каждого сайта (движок то один), имеет смысл воспользоваться моим простеньким кодом, вот он:

  • <?php
  • echo 'User-agent: *
  • Disallow: /system$
  • Disallow: /users$
  • Disallow: /admin$
  • Disallow: /login$
  • Disallow: /tag$
  • Disallow: /feed$
  • Host: '.$_SERVER['HTTP_HOST'].'
  • Sitemap: http://'.$_SERVER['HTTP_HOST'].'/folder/'.$_SERVER['HTTP_HOST'].'/sitemap.xml';
  • ?>
Отличаться у разных сайтов будут только директивы Host и Sitemap. Так и должно быть. Данный пример проходит проверку на правильность в яндексе. Но для того, чтобы robots.php отдавался по запросу robots.txt, нужно сделать следующее - прописать в .htaccess перенаправление:
  • RewriteRule ^robots.txt$ http://%{HTTP_HOST}/robots.php
В принципе абсолютно простое решение, возможно не такое совершеннои и идеальное, но свою задачу оно выполняет: сделать многосайтовую MaxSite CMS с минимальными исправлениями кода, с целью упрощения обновления системы, и как мне кажется я справился с задачей блестяще. Надеюсь знающие люди дадут оценку такому решению.

Существует ещё одна идея - можно sitemap.xml запихать в файлы шаблона. Технически легко осуществимо... Как то не подумал сначала. Завтра попробую сделать. В любом случае это решается простой правкой пары-тройки строк. На сегодня всё.

MaxSite МногоСайт?

Вторник, 21 апреля 2009 г.
Рубрика: Сайтостроительство
Метки: | | |

Здравствуйте друзья!

Недавно у меня родилось множество идей по созданию качественных сайтов. Причём все как-то разом, не к месту и не ко времени...  Однако родились и теперь терзают неокрепший ум:) К делу - мы ж все люди ленивые, а я, наверное, самый ленивый из всех... Чтобы не следить за обновлениями системы управления сайтами, обновлять не несколько систем, а  один раз, решил написать расширение для моей любимой системы. Для MaxSite. Тут возникают закономерные вопросы: не проще ли взять многопользовательский вордпресс или тот же би2, альтернатив множество... Однако, мне кажется, что за системой Макса будущее, при всех её недоработках, да и патриотизм сыграл некоторую роль.

Итак, была идея сделать действительно сервис блогов, но это трудно для меня... и пока я решил попробовать избавиться хотя-бы от проблемы обновления десятка одинаковых систем, вариант этого я вам и предоставляю:

Для начала нам нужно добиться использования одной базы данных. Экономика должна быть экономной! Для этого мы внесём некоторые поправки в файл /application/config/database.php:

  • $pref=$_SERVER["HTTP_HOST"];
  • $pref=str_replace("www.","",$pref);
  • $pref=str_replace(".","",$pref);
  • $pref=str_replace("-","",$pref);
  • $db['default']['dbprefix']=$pref."_";
Здесь мы формируем префикс в базе данных и он будет отличаться для каждого домена. В принципе этого достаточно, однако стоит воспользоваться ещё одним кодом, а именно редиректом через .htaccess на адрес без www. В принципе не обязательно, но лучше создать в корневой папке файл .htaccess и внести в него такие строки:
  • RewriteRule ^(.*)$ - [E=PROTOCOL:http]
  • RewriteCond %{HTTPS} ^on$ [NC]
  • RewriteRule ^(.*)$ - [E=PROTOCOL:https]
  • RewriteCond %{SERVER_PORT} ^80$
  • RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
  • RewriteRule ^(.*)$ %{ENV:PROTOCOL}://%1%{REQUEST_URI} [R=301,L]
  • RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
  • RewriteRule ^(.*)$ %{ENV:PROTOCOL}://%1:%{SERVER_PORT}%{REQUEST_URI} [R=301,L]
Говорю честно: код упёрт с одного из форумов, причём достаточно давно. Его преимущество в отличие от обычного редиректа в том, что он универсален - смело кидайте в корень и для всех сайтов он будет работать.

В принципе эти два пункта у себя я реализовал, сейчас будет работа по созданию robots.txt, оригинального для каждого сайта, а также xml-sitemap, карты сайта. Без этих пунктов о многосайтовости и говорить не стоит:) А об этом я напишу только тогда, когда сделаю сам и оно корректно заработает, хотя наброски у меня уже есть;-)

Первый Постовой:

Стоит почитать блог Антона

Поиск

Статистика

Rambler's Top100