Обход ограничения

Должны выбираться все пользователи где photo != nophoto.jpg, но не отрабатывает с некоторых пор
$q = $modx->newQuery('modUser');
$q->sortby('RAND()');
$q->innerJoin('modUserProfile', 'Profile');
$q->where(array(

    'Profile.photo:!=' => "nophoto.jpg",

));
$result = $modx->getCollection('modUser', $q);
foreach ($result as $user){
$myuserid = $user->id;
$user = $modx->getObject('modUserProfile', array('id' => $myuserid));
$rating = $user->get('fax');
$result = $modx->query("SELECT * FROM modx_users WHERE id = '$user->id'");
$row = $result->fetch(PDO::FETCH_ASSOC);
$myusername = $row['username'];
echo $myusername.'
';

}
если заменить условие на

'Profile.gender' => '1',
то все это условие отлично воспринимается
З.Ы Не судите строго мою «стрепню», пытаюсь вкурить что здесь к чему
Никита
10 апреля 2015, 14:36
modx.pro
2 115
0

Комментарии: 31

Сергей Шлоков
10 апреля 2015, 19:21
+2
Мда. Как же это можно написать такой код, когда и тут, а на rtfm.modx.com и на bezumkin.ru куча примеров и образцов.
Внутри foreach переменная $user перебивается — была объектом modUser, а стала modProfile. А обращение идет как к modUser.
Зачем нужен селект, если username можно получить просто
$myusername = $user->username;
А это чтоб врагов запутать?
$rating = $user->get('fax');
Ужас, ужас.
    Никита
    10 апреля 2015, 20:42
    0
    Исключил то, на что вы указали, но лучше от этого не стало
    $q = $modx->newQuery('modUser');
    $q->innerJoin('modUserProfile', 'Profile');
    $q->where(array(
        'Profile.photo:!=' => "nophoto.jpg",
    ));
    $result = $modx->getCollection('modUser', $q);
    foreach ($result as $user) {
    echo $myusername = $user->username.'
    ';
    }
    Зачем нужен селект, если username можно получить просто
    Тут вы правы

    А это чтоб врагов запутать?
    Я бы не сказал, что мне есть кого путать, да и как по-другому выбрать значение поля fax

    З.Ы. Вы помогаете мне стать лучше
      Алексей Карташов
      10 апреля 2015, 21:14
      0
      Вот то, что точно поможет тебе стать лучше:
      bezumkin.ru/training/
      :)
        Никита
        10 апреля 2015, 21:22
        -3
        Training? No, Thanks

          Алексей Карташов
          10 апреля 2015, 21:27
          0
          Пфф, тогда не удивляйся, что никто не помогает.
            Никита
            10 апреля 2015, 21:45
            -2
            Алексей, все хорошо, в ваших тренингах по шопкиперу и рассылке всякой нечисти юзерам, нет необходимости и не стоит каждого, кому нужна помощь, тыкать лицом в… курсы
              Wassi Wassinen
              10 апреля 2015, 21:49
              0
              Ты бы хоть ознакомился. :) Это подробный мануал по написанию своих дополнений. Без «рассылок» и нечисти. Хочешь — учишься и делаешь сам, не хочешь или не можешь — оплачиваешь труд других. :)
                Никита
                10 апреля 2015, 22:04
                -1
                Непременно ознакомлюсь
                Алексей Карташов
                10 апреля 2015, 21:52
                0
                xD
                Я даже не знаю как реагировать)

                При чём здесь я и шопкипер? Я шопкипер в глаза никогда не видел)
                Какие рассылки?

                Тренинги эти не мои, а Василия Наумкина. И ссылка эта на его сайт.

                И да, «тренинги», если ты не заметил, — бесплатны.

                И да, лично тебе этот курс необходим, иначе я бы в него тебя не «тыкал».

                Такие дела
                  Никита
                  10 апреля 2015, 22:03
                  -4
                  Уважаемый Алексей, реагируйте спокойнее :D .Oткройте ту ссылку, что вы мне «сунули», там 2 курса:

                  1. Рассылка «чего-то там» юзерам
                  2. Пособие по освоению дополнения, miniShop

                  Думаю, теперь несколько просветлело у вас

                  То, что курсы На(без)умкина, и что вы не он, тоже я как-то понял,
                  Сайт Наумкина? Seriously?

                  Хм… Курсы бесплатные, спасибо действительно не заметил

                  P.S Offtop :(
                    Алексей Карташов
                    10 апреля 2015, 22:08
                    0
                    Чувак, ты по-моему упорот (без обид, говорю с улыбкой на лице)), либо слишком быстр и не внимателен.

                    «Рассылка «чего-то там» юзерам» — это не что иное, как курс обучения, в котором можно пройти весь путь по созданию modx-компонента — с нуля до выгрузки в репозиторий. Так уж сложилось, что курсе создаётся компонент именно рассылок email-уведомлений пользователям сайта. Никто тебя не заставляет ни на что подписываться и ни на что не подписывать других.

                    p.s. будь повнимательнее
                      Алексей Карташов
                      10 апреля 2015, 22:11
                      0
                      Хм… Курсы бесплатные, спасибо действительно не заметил
                      А если бы они были платные (как раньше, полгода назад), ты бы за эту ссылку обвинил бы меня в аффилированности?)
                        Никита
                        10 апреля 2015, 22:39
                        0
                        обвинил бы меня в аффилированности?)
                        с вероятностью 95% — да :D
                      Василий Наумкин
                      11 апреля 2015, 05:28
                      0
                      Что тебя смущает в моих заметках и фамилии?

                      Seriously?
            Сергей Шлоков
            10 апреля 2015, 22:38
            +1
            Вы помогаете мне стать лучше
            Прям рекламный слоган. Ну раз настрой позитивный, то продолжим.
            Давай посмотрим, что там в поле photo есть
            $q = $modx->newQuery('modUser');
            $q->select('Profile.photo');
            $q->innerJoin('modUserProfile', 'Profile');
            $result = $modx->getCollection('modUser', $q);
            foreach ($result as $user) {
            	echo $user->photo.'
            ';
            }
            Есть что-то кроме «nophoto.jpg»
              Никита
              10 апреля 2015, 22:48
              0
              Забавно, 500-ая ошибка Internal Server Error, если 2 строку убрать, то ошибка пропадает
              .htaccess посмотрел, вроде все нормально

              И вообще, возможно ли поле photo выбрать? Оно же по-моему также как fax, state и прочие в другом месте хранится ( собственный воспаленный мозг)

              Если вторую строку на это заменить

              $q->select(array(
                  'modUser.id',
                  'modUser.username',
                  'Profile.fullname',
                  'Profile.email',
              ));
              то все поля выбираются без ошибок
                Никита
                10 апреля 2015, 23:02
                0
                $q = $modx->newQuery('modUser');
                $q->select(array(
                    'modUser.id',
                    'modUser.username',
                    'Profile.fullname',
                    'Profile.email',
                    'Profile.photo'
                ));
                $q->innerJoin('modUserProfile', 'Profile');
                $result = $modx->getCollection('modUser', $q);
                foreach ($result as $user) {
                	echo $user->photo.'
                ';
                }
                Результат:

                /assets/images/q8AUyq0ydhw.jpg
                /assets/images/NUZxHwvjoBw.jpg
                /assets/images/R0fzL82P1bg.jpg
                /assets/images/nophoto.jpg
                /assets/images/MVI1FuDzmFY.jpg

                мде, тут и прочие поля можно выбрать, красота
                  Сергей Шлоков
                  11 апреля 2015, 08:38
                  0
                  Тебе уже понятно, что условие
                  'Profile.photo:!=' => "nophoto.jpg"
                  не будет работать?
                  Правильно будет
                  'Profile.photo:NOT LIKE' => "%nophoto.jpg",
                  Дальше. Тебе нужно всего 2 поля — username и fax. Так и пишем.
                  $q = $modx->newQuery('modUser');
                  $q->setClassAlias('User');
                  $q->innerJoin('modUserProfile', 'Profile');
                  $q->select('User.id,User.username,Profile.fax');
                  $q->where(array(
                      'Profile.photo:NOT LIKE' => "%normal",
                  ));
                  $users = $modx->getCollection('modUser', $q);
                  foreach ($users as $user) {
                  	echo $user->username,'[br]';
                  	// Сохраним fax в переменной $fax, а не в $rating
                  	$fax=$user->fax;
                  }
                  П.С. Тег [br] измени на правильный.
                    Никита
                    11 апреля 2015, 10:41
                    0
                    И все-таки, получается, что id, username, password хранятся отдельно от fax,state,photo и прочих?
                    одни хранятся в данных о юзере, а вторые о профиле, поправьте если ошибаюсь
                      Сергей Шлоков
                      11 апреля 2015, 11:00
                      0
                      Получается что так.
                        Никита
                        11 апреля 2015, 11:28
                        0
                        Спасибо, Сергей, может подскажете где про xPDO можно почитать, кроме как
                        rtfm.modx.com/xpdo/2.x/class-reference/xpdo, или вышеупомянутые тренинги смотреть?
                          Сергей Шлоков
                          11 апреля 2015, 11:47
                          0
                          Например, тут. Или тут. В официальной документации в разных разделах есть примеры.
                            Никита
                            12 апреля 2015, 12:29
                            0
                            Спасибо,
                            Я так понял в полях юзера нет полей со значением Int кроме как ID, как думаете можно ли перевести значение поля fax из строки в число, и сделать сортировку по нему?
                            Воеводский Михаил
                            12 апреля 2015, 12:35
                            0
                            Возможно только с изменением модели самого MODX. Чтобы этого не делать, оптимально создать своего пользователя, унаследовав родной modUser.

                            Но, не изучив xPDO, лучше не торопиться с расширением стандартных объектов.
                            Никита
                            12 апреля 2015, 12:57
                            0
                            а c extended полями?
                            Воеводский Михаил
                            12 апреля 2015, 13:21
                            0
                            Все extended поля представляют собой элементы массива, которые сохраняются в базе в json'е. Естественно, никакой сортировки штатными средствами по ним быть не может.
                            Никита
                            12 апреля 2015, 13:22
                            0
                            Все решилось проще, изменил в БД в таблице modx_users_attributes значение поля fax вместо varchar на int :)
                            Воеводский Михаил
                            12 апреля 2015, 13:24
                            0
                            Не лучший метод.
                            Никита
                            12 апреля 2015, 13:38
                            0
                            Соглашусь, но это было сделать проще, опять же никаких проблем пока не возникло ( и надеюсь не возникнет )
                            Сергей Шлоков
                            12 апреля 2015, 14:34
                            0
                            Ошибка всех начинающих. А с обновлением чего будешь делать?
                            Все решается очень просто. Нужно просто учить матчасть. И ни в коем случае не лезть в ядро.
                            $q->select('User.id,User.username, cast(Profile.fax AS UNSIGNED) as int_fax');
                            $q->sortby('int_fax');
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        31