maxsite

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

Вновь всплыла на форуме Макса тема о некорректной отдаче HTTP-заголовков. Видимо в прошлый раз я недостаточно рассмотрел проблему и, как следствие, она не была решена.

Цитирую:

У нас уже был случай, когда на странице пишется 404,
а в заголовке 200. По идее нужен контроль над отдачей заголовка.
Как выяснилось, существует загвоздка:

На уровне системы нет такого контроля - она лишь послушно раскладывает
адрес на сегменты. В других CMS этот процесс практически аналогичен -
можно добавить произвольные get-параметры в адрес и получить эту же
страницу.
Я вижу такой выход: по умолчанию система отдаёт 404. При подключении типов, если есть материал для отображения переопределяем на 200. Потом нужна проверка на лишние сегменты. И нужно в тех плагинах, где идёт подключение на сегмент сделать переопределение заголовка на 200.

Максим предложил такое решение:

Админ задаёт некий шаблон адреса, который считается верным, например:
category/*
category/*/next/*
/next/*
page/*
где / - разделитель сегментов, а * - произвольная часть сегмента. В этом примере адрес category/news будет валидным, а category/news/23 - нет.

То есть плагин при инициализации системы (хук init) проверяет текущий адрес на один из разрешенных шаблонов и если он соответствует любому варианту, то ничего не делает. Если же соответствия нет, переделывает type на page_404.

Нулевая тестовая версия плагина была реализована мной.

chaly_404.zip 0

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

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

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

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

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

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

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

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

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

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

Динамично развивающийся рынок диктует необходимость создания сайта как средства информирования и удержания целевой аудитории любой организации. Это также может быть собственный учёт, документооборот, иные Интернет-ресурсы. Для молодёжных организаций и общественных объединений сайт ещё более актуален, поскольку молодые люди привыкли получать всю информацию через Интернет.

В рамках настоящей работы создан и запущен в эксплуатацию сайт «Открой свои возможности», в настоящее время доступный в Интернете по адресу UrSSA.ru. Заказчиком данного проекта является Министерство по делам молодёжи УР и Республиканский совет студентов и аспирантов. Необходимо было получить работоспособный программный продукт в максимально короткие сроки. Ввиду того, что требования заказчика часто менялись и дополнялись, сформировать сводное техническое задание было практически невозможно.

В результате работы программиста, дизайнера и верстальщика был разработан удобный в использовании сайт со следующей функциональностью: центральное место занимает лента новостей с возможностью поиска по всем записям; пользователю дана возможность оставить своё мнение о новостях, проголосовать по предложенным вопросам и связаться с администрацией; материалы сайта доступны в виде ленты RSS.

Рассматривая техническую сторону вопроса, следует выделить систему управления содержанием сайта от отечественного разработчика – MaxSite CMS, как основное средство реализации проекта. Система реализована на CodeIgniter с поддержкой PHP и использует для хранения информации базу данных MySQL. Выбранная платформа позволяет использовать и другие решения, например, MS SQL, Postgre, Oracle, SQLite. Необходимо добавить, что использовалось много сторонних расширений, автором написаны собственные.

Также требовалось учесть, что система управления сайтом «Открой свои возможности» должна быть простой. Обслуживание и развитие сайта предполагается силами студентов, обычно ещё не имеющих опыта работы с подобными системами.

Оценим временные затраты на создание описанного выше продукта. Наиболее ответственная часть работы – установка и настройка системы управления на сервере. Этот процесс занял около двух часов. Далее возникла создания графического шаблона будущего сайта. Дизайнеру потребовалось на это около пяти часов. Для оценки работы дизайнера необходимы специальные знания. Творческий процесс трудно лимитировать. Было решено считать такой результат вполне удовлетворительным в плане быстроты. Завершающий этап разработки сайта – вёрстка, программирование и «подгонка» шаблона под систему управления. В рамках этого этапа был создан графический вывод данных, всё было «увязано» с системой управления. На это потребовалось приблизительно семь часов. В результате было выяснено, что в нашем случае создать нужный заказчику сайт при использовании типовых решений можно приблизительно за неделю. Данный подход позволяет заметно сократить время разработки. Следует отметить, что при использовании типовых свободно распространяемых решений профессиональному разработчику будет достаточно одних суток.

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

Подробнее о 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, поверх льёте мои труды и на выходе у вас многосайтовая система. Наверное за выходные сделаю пробную бету ;-)

Поиск

Статистика

Rambler's Top100