Блог начинающего инстантЦМСника

Автор блога:
Все рубрики (2)

Правильный .Запомнить пароль.

Добрый день!
На днях внимательный пользователь сообщил мне, что он старательно ставит галочку "запомнить пароль", но каждый раз потом приходится ему набирать снова и снова.
Я попробовал, и правда, но дело было в том, что если сразу перейти на другую страницу, то пользователь чудесным образом авторизовывался. А виной всему всего одна строчка.
Итак, говорю сразу, что делаю на версию 1.5.1, на 1.5.2 смотрите сами. Но так как на этом сайте ситуация та же (не верите, проверьте :)), то значит и в версии 1.5.2 эта ошибка не вылечена.
UPDATE! Данное решение также работает в версии 1.5.2 (спасибо Madmax)
А решение простое.
1. Открываем в корне вашего сайта файл index.php в вашем любимом текстовом редакторе (не пугайтесь, редактировать нужно именно его :))
2. ищем строчку
Код PHP:
$inUser->autoLogin();
(примерно 80-81)
3. вырезаем ее (не удаляем!!!. а вырезаем, комбинация кнопок Ctrl+X)
4. находим чуть выше строку
Код PHP:
if ( !$inUser->update() ) { $inCore->redirect('/404'); }
(у меня 55)
5. ДО нее вставляем наш вырезанный текст (комбинация  кнопок Ctrl+V)
6. Открываем файл /core/classes/user.class.php
7. Ищем там строчку
Код PHP:
if ($inCore->getCookie('userid') && !$this->id){
(у меня 193)
8. ЗАМЕНЯЕМ эту строку следующей:
Код PHP:
 if ($inCore->getCookie('userid') && !$_SESSION['user']['id']){
9. Чуть ищем строку
Код PHP:
$this->resetStatTimer();
(у меня 205)
10. Закомментируем ее. Примерно вот так:
Код PHP:
 //$this->resetStatTimer();
или вовсе удаляем
11. Сохраняем всё и радуемся жизнью :)

Теперь с программной точки зрения. Тут всё просто, инстант пользователя держит по его id, который хранится в массиве $_SESSION, но обратите внимание на строки, что мы изменили, функция $inUser->update() как раз и проверяет, пользователь это или нет, но функция $inUser->autoLogin() находится по коду ниже, то есть у нас получается, что инстант проверяет пользователя, хотя он его еще не авторизовал автоматически. Вознилка проблема с функцией $inUser->autoLogin(), она срабатывает всегда когда есть кука, но нет id, но так как по логике мы должны сначала войти, а только потом представиться, то и данное правило получается срабатывало бы всегда, так как переменная $this->id присваивается после в функции $inUser->autoLogin(), которая наступит позже.

ВОЗМОЖНО есть еще какие-либо проблемы после этого изменения, но я в течение непродолжительного времени их не увидел, да и по логике их не будет, так как функция $inUser->autoLogin() ничего особенного не делает, просто в $_SESSION добавляет id пользователя, и всё. Поэтому система от этого не пострадает.

Старожилы, прощу у вас помощи, проверьте этот метод, и скажите, куда обратиться к администрации, чтобы они это исправили в системе.

P.S. ну сделайте наконец, чтобы можно было вводить кавычки в заголовок записи.... :(
P.S.S. Кто делал по старой версии, прочитайте пункты 6-10.

Форма для ввода данных в каталог

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

Итак, данный мод (модулем его не назовешь, так как модулем инстанта он не является) представляет собой файл для инклуда. Пример можно посмотреть здесь http://kamenka-city.ru/content/0/read37.html
Мод писался для версии 1.5.1, на 1.5.2 тоже работает.
Инструкция.
1. Качаем данный файл http://kamenka-city.ru/temp/additem.rar.
2. Распаковываем, полученный файл additem.php добавляем в папку /includes/myphp/
3. Если необходимо, изменяем настройки скрипта (в начале файла)
4. Создаем статью, в ней выбираем "внешний файл", название файла будет additem.
5. в .htaccess найти все строки, начинающиеся на
Код PHP:
RewriteRule ^content
и 
RewriteRule ^view-
и в конце каждой строки дописать
Код PHP:
&%{QUERY_STRING}
(без пробела)

6. Проверяем работу, заходим в нашу статью (до этого не забываем создать рубрики в каталоге)
7. Если всё в порядке, то открываем в текстовом редакторе файл /components/catalog/frontend.php
ищем там строку
Код PHP:
if ($do == 'tag') 
(примерно 334) и ДО НЕЕ добавляем:
Код PHP:
echo "<a href=\"/content/0/read37.html\">Добавить организацию в каталог</a>
";
Внимание!!! Вместо 37 вводим id вашей статьи, которую вы создали в пункте 4.
Всё.

Данный мод еще только сырой, поэтому прежде чем впускать его к пользователям, проверьте его работоспособность. По мере свободного времени буду обновлять этот мод.

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

UPDATE1.
1. Добавилась возможность выбора раздела для выбора рубрик (удобно, если на сайте несколько универсальных каталогов)
2. Показываются не только данные из определенного раздела, но еще и только те рубрики, у которых активирован пункт "опубликовать"
3. Появилась возможность добавлять данные гостям (будьте осторожнее, так как никакой защиты от спамеров в настоящий момент в скрипте нет!)
Для установки новой версии просто скачайте по старой ссылке.