Разделы

Очень странное поведение сайта

Был создан сайт, практически с нуля. После того как началось тестирование, выяснилось, что страницы сайта созданные подключение сниппетов (напимер [[!php-reg]] на странце ресурсов, вдруг это имеет значение) не работают, то есть просто не обновляются. Чтобы они заработали нужно залогиниться на xx.ru/manager, а без этого ничего не работает. Не подскажете в чем дело?
  • 0
  • 11 декабря 2011, 03:55
  • PAKOTxx

Комментарии (49)

RSS свернуть / развернуть
0
созданные подключение сниппетов
вот здесь непонятно ничего
avatar

viktormatush

  • 11 декабря 2011, 03:58
0
Ну то есть страница создана в ресурсах админки. В ней идет только вызов сниппета вида [[! имя]]. Чанков нет. Полностью все функции и т.д. в сниппете.
avatar

PAKOTxx

  • 11 декабря 2011, 04:00
0
делаю вывод, что сниппеты работают и формируют страницу только для зарегистрированного пользователя. я правильно понял? Зарегистрированного (как админ сайта) и вошедшего.
avatar

viktormatush

  • 11 декабря 2011, 04:02
0
Да, то есть если администратор не залогинен то ничего не работает.
avatar

PAKOTxx

  • 11 декабря 2011, 04:05
0
Если сторонний посетитель сайта (незалогиненый) заходит на сайт и в это время админ шастает по сайту, то у этого стороннего пользователя страница изменяется как нужно или нет?
avatar

viktormatush

  • 11 декабря 2011, 04:07
0
Нет, только если администратор залогинен на том же браузере что и пользователь. То есть допустим на одном компьютере на ФФ залогинен админ, а на Хроме пытается зайти пользователь — для него ничего не будет работать.
avatar

PAKOTxx

  • 11 декабря 2011, 04:09
0
сниппеты работают и формируют страницу только для зарегистрированного пользователя

Valikras: группы пользователей… нужно смотреть права
+ копать код сниппетов, они должны работать для всех пользователей, а не только для тех, кто сделал логин…
avatar

viktormatush

  • 11 декабря 2011, 04:12
0
Так они не работают даже для тех кто сделан логин, если в админке не авторизирован админ…
Где можно посмотреть права работы сниппетов?
avatar

PAKOTxx

  • 11 декабря 2011, 04:13
0
та для сниппетов нет прав, есть права для групп ресурсов и для пользователей.
avatar

viktormatush

  • 11 декабря 2011, 04:15
0
Но почему тогда даже для пользователей которые только хотят зарегестрироваться ничего не работает?
avatar

PAKOTxx

  • 11 декабря 2011, 04:21
0
какие группы пользователей у Вас созданны, нужно смотреть права.
avatar

valikras

  • 11 декабря 2011, 04:07
0
В контроле доступа — аноним и Administrator
avatar

PAKOTxx

  • 11 декабря 2011, 04:09
0
Не знаю что может быть не так в доступе, т.к. даже обычному пользователю который пытается зарегестрироваться — это недоступно
avatar

PAKOTxx

  • 11 декабря 2011, 04:13
0
я правильно понял, к примеру ресурс
бла-бла-бла бла-бла-бла бла-бла-бла [[!snippet]] бла-бла-бла бла-бла-бла бла-бла-бла

выводиться только бла-бла-бла?
avatar

valikras

  • 11 декабря 2011, 04:13
0
версия какая?
avatar

valikras

  • 11 декабря 2011, 04:16
0
Нет, тупо всегда идет перенаправление на index.php
avatar

PAKOTxx

  • 11 декабря 2011, 04:17
0
вообще давайте код сниппетов в студию, а мы с Валикрасом сейчас тут гадаем по кофейной гуще ;). Привет кстати ;)
avatar

viktormatush

  • 11 декабря 2011, 04:17
0
Ну вот допустим
— <?php
echo "<script language='javascript' type='text/javascript'
src='assets/components/tinymce/jscripts/tiny_mce/tiny_mce.js'>
";

echo "";
$id = $modx->getLoginUserID();
$result=$modx->db->query(«SELECT * FROM modx_user_attributes WHERE id=$id»);
$row = $modx->db->getRow($result);
if ($row[role]==0)
{
echo "";
}
if ($row[role]==1)
{
$result=$modx->db->query(«SELECT * FROM modx_site_metatags WHERE new=1»);
while( $row = $modx->db->getRow($result))
{
echo $row[name];
echo "
";
echo $row[tagvalue];
echo "
";
echo "Разрешить";
echo " Забраковать";
echo " <a href='/uver/?par=3&id=$row[id]''>Изменить";
echo "
";
echo "--------";
echo "
";
}
}
if ($row[role]==4)
{
echo "";
echo «Введите название новости:
»;
echo «Выберите раздел новости:
»;
echo "";
echo "Новости компаний";
echo "Конкурсы";
echo "Акции и бонусы";
echo "Обучение";
echo "Аналитика";
echo "

";
echo «Введите текст новости:


»;
echo "";
echo "";
}

echo "";
— И если я вызываю этот сниппет — перенавправление на index.php. А если в этот момент с этого же браузера залогинен админ в xx.ru/manager/ то всё прекрасно работает
avatar

PAKOTxx

  • 11 декабря 2011, 04:19
+2
getLoginUserID() — берёт ID залогиненного пользователя
modx_user_attributes — это атрибуты уже зарегистрированного пользователя, а все остальные пользователи, даже те, которые «хотят зарегистрироваться» идут лесом.
avatar

viktormatush

  • 11 декабря 2011, 04:25
0
Я просто в ШОКЕ!!!
avatar

valikras

  • 11 декабря 2011, 04:25
+1
Спокойствие, как говорил Карлсон, все же когда-то учились.
avatar

viktormatush

  • 11 декабря 2011, 04:26
0
$id = $modx->getLoginUserID();
а дальше ошибка, так пользователя нету id, не залогиненного… Вот вас и выкидывает на главную
avatar

valikras

  • 11 декабря 2011, 04:27
0
@viktormatush просветите человека, как правильно писать сниппеты, а то я могу не сдержаться…
avatar

valikras

  • 11 декабря 2011, 04:28
0
Извините, возможно что я не так понимаю, но всё же…
Я понимаю как работает эта функция, я понимаю что она берет залогиненого пользователя. Это сниппет личного кабинета. Почему тогда, когда пользоватлей ЗАЛОГИНЕН(регистрация подтверждена, он существует) этот сниппет не срабатывает, если не залогинен админ в /manager/? Простите если не понимаю чего-то элементарного, это мой первый проект на modx
avatar

PAKOTxx

  • 11 декабря 2011, 04:31
+1
это так, порыв… просто давно такого не видел!
Я не осуждаю, вы думаете мой первый снипет лучше был? Я его храню как реликвию!!!

Потом $modx->db->query — в ообще не пойму как срабатывает?
avatar

valikras

  • 11 декабря 2011, 04:36
0
Смысл такой — берется ИД пользователя, потом он изымается из базы, поле role — его права, они 0, 1 или 4. В зависимости от прав выполняется что-то…
avatar

PAKOTxx

  • 11 декабря 2011, 04:39
0
Я не могу понять почему ВСЁ начинает работать правильно если залогинен админ -_-
avatar

PAKOTxx

  • 11 декабря 2011, 04:40
0
а у админа ролькакая?
avatar

ManManovich

  • 11 декабря 2011, 08:10
0
ну и что в результате выводится?
avatar

ManManovich

  • 11 декабря 2011, 08:11
0
То есть? Я же писал если админ не залогинен то ничего не работает, и я не могу понять почему
avatar

PAKOTxx

  • 11 декабря 2011, 14:03
0
темно наверное уже, глаза выколи, не вижу я в таблице modx_user_attributes поле role
avatar

valikras

  • 11 декабря 2011, 04:47
0
Наверно база немного изменена, у меня в modx_user_attributes:
id internalKey fullname role email phone mobilephone blocked blockeduntil blockedafter logincount lastlogin thislogin failedlogincount sessionid dob gender address country city state zip fax photo comment website extended
avatar

PAKOTxx

  • 11 декабря 2011, 04:48
0
у Вас Рево? какя версия?
avatar

valikras

  • 11 декабря 2011, 04:49
0
Наверно база немного изменена,
— это как??? Кто её изменил, Вы?
avatar

valikras

  • 11 декабря 2011, 04:50
0
Нет, когда я начал доделывать некоторый функционал такое уже было…
Кстати
Проблема вот в чем — всё работает правильно ТОЛЬКО если с данного браузера залогинен администратор. У меня была мысль может где-то в настройках стоит ограничение на функционал? Ну то есть допустим когда сайт временно закрывают… Т.к. он был закрыт, потом кто-то (не знаю кто, из персонала) его вроде как открыл… Может он что не так сделал?
— Это реально? Что отключен функционал сайта? То есть не до конца всё включили?
avatar

PAKOTxx

  • 11 декабря 2011, 04:53
0
та я, честно говоря, сам только начал пхп изучать =).
avatar

viktormatush

  • 11 декабря 2011, 04:32
+1
еще совет — прочитайте статью о том, как нужно делать пользовательские сниппеты
Вызовы echo не рекомендуют делать, лучше склеивать результат через $output .=
и выводить как return $output;
avatar

viktormatush

  • 11 декабря 2011, 04:31
0
Спасибо, понял, но я всё так же в невединии почему данный сниппет не срабатывает для зарегистрированого пользователя… И getLoginUserID(); существует, и в modx_user_attributes он есть. И начинает работать только если залогинен админ
avatar

PAKOTxx

  • 11 декабря 2011, 04:37
0
Давайте так:
1) опишите, что вам нужно сделать;
2) прочитайте статью выше о том как сделать пользовательские сниппеты;
3) посмотрите как нужно делать переносы строки в php и html;
4) перепишите код сниппета завтра на свежую голову, приняв во внимание п.2, п3, дальше завтра п.1 и п.3 покажете здесь, еще раз всё разберём и обсудим. Всем спокойной ночи!
avatar

viktormatush

  • 11 декабря 2011, 04:43
0
1) Много что, было написано в районе 20 сниппетов для различных функций
2) Хорошо
4) Проблема вот в чем — всё работает правильно ТОЛЬКО если с данного браузера залогинен администратор. У меня была мысль может где-то в настройках стоит ограничение на функционал? Ну то есть допустим когда сайт временно закрывают… Т.к. он был закрыт, потом кто-то (не знаю кто, из персонала) его вроде как открыл… Может он что не так сделал?
avatar

PAKOTxx

  • 11 декабря 2011, 04:51
+1
Давно такого кода не видел.

В MODX Revolution не нужно использовать SQL запросы, все уже продумано до нас. Есть xPDO, есть куча полезных методов, например:

$modx->isAuthenticated('web') - залогинен ли юзер в контекст web.
$modx->isMember('groupname') - входит ли юзер в группу groupname.
$modx->hasPermission('permname') - имеет ли юзер определенное право permname
$modx->getSettings() - настройки юзера
$modx->user->getOne('Profile') - Объект профиля юзера (из таблицы attributes)


Куча полезных методов движка, вам особо рекомендую regClientStartupCSS и regClientStartupScript, для подключения css и js на страницу.

Также имеются методы класса User. Тоже очень полезные.

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

Я вообще не понимаю, зачем вам MODX если вы пишите в нем смесь php, html и sql, а также не пользуетесь шаблонами и чанками? Не проще было сразу без движка, файлы php создавать?
avatar

bezumkin

  • 11 декабря 2011, 12:05
0
Спасибо, учту, но пришел к выводу что дело не в этом. Т.к.вызываю
[[!Register]] [[$lgnRegisterForm]]
Насколько я знаю это стандартная форма, я ее не трогал. И всё равно идет пенаправление. То есть получается что не выполняется ни 1 чанк, ни 1 сниппет. Возможно кто-то сталкивался в чем дело? Какие-то права или что-то в этом роде?
avatar

PAKOTxx

  • 11 декабря 2011, 14:05
0
да там по ходу ещё и в таблицах нашаманили… добавили сами поля, ну чтобы лишних запросов не делать. ОПТИМИЗИРОВАЛИ!!! Я когда увидил, просто в ШОКЕ был! Я не осуждаю, это просто мои эмоции…
avatar

valikras

  • 11 декабря 2011, 14:07
0
Да я сам это уже понял, и мягко скажем аналогично эмоции( А эта фишка с неработой сайта без залогиненого админа вообще убила (
avatar

PAKOTxx

  • 11 декабря 2011, 14:12
0
ок, по делу...., если вы свой снайпер отключаете, то всё работает как надо?
avatar

valikras

  • 11 декабря 2011, 14:14
0
Кого?
avatar

PAKOTxx

  • 11 декабря 2011, 14:15
0
я имею в виду, ваш код в сниппете. Если вы, уберёте сниппет, то сайт работает как надо? пользователи видят ресурс?
avatar

valikras

  • 11 декабря 2011, 14:17
0
Пользователи и так его видят, они видят главную страницу. То есть просто не срабатывает ни 1 сниппет, ни 1 чанк
avatar

PAKOTxx

  • 11 декабря 2011, 14:56
0
Создайте группы ресурсов своего сайта и задайте какие группы пользователей могут их видеть и что с ними делать, не забывайте если у вас мультиязычный сайт, то нужно добавлять минимальные роли для всех контекстов. В ресурсе где вызывается ваш снипет(снайпер ;)) дайте минимальную роль для контекста веб.
Вот вам для ознакомления:
community.modx-cms.ru/blog/documentation/869.html
Ничего сложного там нет.
avatar

TuncaH

  • 13 декабря 2011, 16:43

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.