Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Вывод информации о пользователе на сайте

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

323182

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
На сайте нужно вывести информацию о пользователе, а именно Страну, Город и Возраст пользователя.
Имеются готовые решения, но с ошибками.
 
1. Данный код выводит страну, но с ошибкой: Fatal error: Call to a member function getInfo() on a non-object in Z:\home\1.ru\www\modules\mod_topmembers\tmpl\default.php on line 33

Код:
<?php echo $row->user->getInfo('FIELD_COUNTRY'); ?>

 
2. Код выводит город с ошибкой: Fatal error: Call to a member function getInfo() on a non-object in Z:\home\1.ru\www\modules\mod_topmembers\tmpl\default.php on line 33

Код:
<?php echo $row->user->getInfo('FIELD_CITY'); ?>

 
3. Код выводит возраст. Ошибка у всех пользователей одинаковый возраст.
Например: Super User 35, Sergei 35, и т.д. и т.п.  

Код:
 
<?php
 
$userModel       = CFactory::getModel('user');
$user         = CFactory::getUser($user->id);
   
$birthdate = $user->getInfo('FIELD_BIRTHDATE', $user);
 
if(!$birthdate)
{
$age = "Не указано";
}
else
{
list($year,$month,$day) = explode("-", $birthdate);
$today = time();
for ($yr = $year, $age = -1; mktime(0, 0, 0, $month, $day, (int)$yr) < $today; $yr++, $age++);
}
; ?>
 
Возраст: <?php echo $age ; ?>

 
Подскажите, пожалуйста, кто знает, что нужно исправить.

Всего записей: 44 | Зарегистр. 07-01-2012 | Отправлено: 11:58 15-08-2015 | Исправлено: 323182, 14:43 15-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
323182

Цитата:
Fatal error: Call to a member function getInfo() on a non-object  

говорит о том, что $user не является объектом.
 

Цитата:
CFactory::getUser($user->id)

у ваc $user, скорее всего, не определен (если файл вызывается напрямую, а не подключается куда то), а вы пытаетесь его id использовать.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 19:47 15-08-2015
323182

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
говорит о том, что $user не является объектом.  

какой то еще должен быть код, который указывает на код <?php echo $row->user->getInfo('FIELD_COUNTRY'); ?>?  

Цитата:
 
у ваc $user, скорее всего, не определен (если файл вызывается напрямую, а не подключается куда то), а вы пытаетесь его id использовать.  

а как его определить в какой строке кода?

Всего записей: 44 | Зарегистр. 07-01-2012 | Отправлено: 20:23 15-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
323182

Цитата:
какой то еще должен быть код, который указывает на код  

ну откуда я знаю.. я вам указываю причину, а почему $user неопределена - нужно смотреть откуда идет, что передается.. почему переменная не является объектом.
 

Цитата:
а как его определить в какой строке кода?  

что именно определить? сообщение об ошибке указывает на строку

Цитата:
in Z:\home\1.ru\www\modules\mod_topmembers\tmpl\default.php on line 33  

так же оно указывает на причину

Цитата:
Call to a member function getInfo() on a non-object

то есть в случае вызова метода класса $user->getInfo(), переменная не является классом (объектом), а значит у нее нет метода getInfo, о чем и говорит ошибка.
копать нужно выше, почему переменная не является объектом.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 21:01 15-08-2015
323182

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
другими словами тут нужны мозги и не в коем случае мои, а тем более ваши

Всего записей: 44 | Зарегистр. 07-01-2012 | Отправлено: 21:27 15-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
323182

Цитата:
другими словами тут нужны мозги и не в коем случае мои, а тем более ваши

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

Цитата:
$row->user->getInfo('FIELD_CITY');

$row->user не является объектом. откуда $row берется - я не знаю, не показали.
догадываюсь, что выборка из чего то.. из базы, к примеру.  
ну так выборка из базы не возвращает объект сам по себе (я не говорю о сериализации).
покажите код, подскажем дальше.
 

Цитата:
Код выводит возраст. Ошибка у всех пользователей одинаковый возраст.  
Например: Super User 35, Sergei 35, и т.д. и т.п.  

к чему эти сложности?

Цитата:
list($year,$month,$day) = explode("-", $birthdate);  
$today = time();  
for ($yr = $year, $age = -1; mktime(0, 0, 0, $month, $day, (int)$yr) < $today; $yr++, $age++);  
}  
; ?>  
 
Возраст: <?php echo $age ; ?>

что мешает взять сегодняшнюю дату, вычесть день рождения и получить возраст? зачем тут цикл вообще?
http://php.net/manual/en/function.date-diff.php

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 21:33 15-08-2015
323182

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вычесть день рождения для каждого пользователя?

Всего записей: 44 | Зарегистр. 07-01-2012 | Отправлено: 21:49 15-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
323182

Цитата:
вычесть день рождения для каждого пользователя?

да. гораздо быстрее и проще, чем в цикле гонять.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 21:50 15-08-2015
323182

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Код <?php echo $row->user->getInfo('FIELD_COUNTRY'); ?>  и <?php echo $row->user->getInfo('FIELD_CITY'); ?> были написаны для данного кода.
Подробнее...

Всего записей: 44 | Зарегистр. 07-01-2012 | Отправлено: 22:06 15-08-2015 | Исправлено: 323182, 09:27 16-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
323182

Цитата:
были написаны для данного кода.  

но я не вижу этих кусков в этом коде. покажите что и как использовали.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 22:16 15-08-2015
323182

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
да. гораздо быстрее и проще, чем в цикле гонять.

 
Не понял, как сконструировать код, что взять с примеров, а что убрать?
Код нужно полностью удалить:

Код:
 
<?php
 
$userModel       = CFactory::getModel('user');
$user         = CFactory::getUser($user->id);
   
$birthdate = $user->getInfo('FIELD_BIRTHDATE', $user);
 
if(!$birthdate)
{
$age = "Не указано";
}
else
{
list($year,$month,$day) = explode("-", $birthdate);
$today = time();
for ($yr = $year, $age = -1; mktime(0, 0, 0, $month, $day, (int)$yr) < $today; $yr++, $age++);
}
; ?>
 
Возраст: <?php echo $age ; ?>
 
 
или только заменить определенные строки:

Цитата:
 
list($year,$month,$day) = explode("-", $birthdate);  
$today = time();  
for ($yr = $year, $age = -1; mktime(0, 0, 0, $month, $day, (int)$yr) < $today; $yr++, $age++);  
}  
; ?>  
 
Возраст: <?php echo $age ; ?>  
 

Если бы я знал PHP, то меня бы тут не было.
 
Добавлено:

Цитата:
но я не вижу этих кусков в этом коде. покажите что и как использовали.

Эти куски можно вставить около имени пользователя.

Всего записей: 44 | Зарегистр. 07-01-2012 | Отправлено: 22:33 15-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
323182

Цитата:
или только заменить определенные строки:  

только заменить строки.
 

Код:
<?php
$date = '1980-1-1';
$age = DateTime::createFromFormat('Y-m-d', $date)
     ->diff(new DateTime('now'))
     ->y;
echo $age;

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

Цитата:
Эти куски можно вставить около имени пользователя.

ну так покажите что использовали, так будет понятно почему возникает ошибка.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 22:37 15-08-2015 | Исправлено: Mavrikii, 22:42 15-08-2015
323182

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
ну так покажите что использовали, так будет понятно почему возникает ошибка.

 
Ошибка возникает в другом файле, а в этом файле вместо страны выводится COM_COMMUNITY_LANG_NAME_RUSSIANFEDERATION.
 
и с этого файла был взят код для того, чтобы вывести страну и город в другом файле, но нужен был еще добавочный код из-за которого и возникает ошибка.

Всего записей: 44 | Зарегистр. 07-01-2012 | Отправлено: 22:43 15-08-2015 | Исправлено: 323182, 22:57 15-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
323182

Цитата:
echo $row->user->getDisplayName();  

а на это ошибку выдает?  
должно быть тоже сообщение.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 22:54 15-08-2015
323182

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 

Цитата:
echo $row->user->getDisplayName();

а на это ошибку выдает?  
должно быть тоже сообщение.

Ошибок в отображении имени нет, только не отображается название страны, а вернее языковый перевод.

Всего записей: 44 | Зарегистр. 07-01-2012 | Отправлено: 23:02 15-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
323182
тогда непонятно. должно ругаться и на тот кусок, там используется тот же способ вызова метода класса.
 
исключение если только случайно не сделали ошибку в
Цитата:
$row->user
и не набрали user в другой кодировке (буква e так же будет выглядеть).
скопируйте эту часть из работающего кода и замените в своей части.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 23:04 15-08-2015
323182

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я так понял, что за вывод кода <?php echo $row->user->getInfo('FIELD_COUNTRY'); ?>  и <?php echo $row->user->getInfo('FIELD_CITY'); ?> отвечает не этот код файла, что выше, а совсем другой, тот код где расположена форма поиска?

Всего записей: 44 | Зарегистр. 07-01-2012 | Отправлено: 23:08 15-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
323182

Цитата:
отвечает не этот код файла, что выше, а совсем другой, тот код где расположена форма поиска?

код отвечает за ошибку в первом сообщении
если это файл
Цитата:
Z:\home\1.ru\www\modules\mod_topmembers\tmpl\default.php

и строка 33. если это не тот файл, то смотрите указанный.
 
если же
Цитата:
Ошибка возникает в другом файле, а в этом файле вместо страны выводится COM_COMMUNITY_LANG_NAME_RUSSIANFEDERATION.

то это уже другая ситуация.
не совсем имеющая отношение к php, просто в файлы с переводом не добавлен вариант. либо нужно использовать функцию для перевода параметра
судя по всему, должно быть вида

Код:
echo JText::_($row->user->getInfo('FIELD_COUNTRY'));

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 23:13 15-08-2015
323182

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо огромное за подробный ответ, но решения с <?php echo JText::_($row->user->getInfo('FIELD_COUNTRY'));?> и $row->user не исправили ошибку, к сожалению.
в языковом файле .ini добавлен перевод COM_COMMUNITY_LANG_NAME_RUSSIANFEDERATION="Российская Федерация" с данного файла не выводится не только Россия, а все страны подряд.
 
Что касается кодов <?php echo $row->user->getInfo('FIELD_COUNTRY'); ?>  и <?php echo $row->user->getInfo('FIELD_CITY'); ?>, которые выводят Страну и Город пользователя, то я имел ввиду, что еще нужно дописать, чтобы можно было выводить о стране и городе пользователя в любом месте на сайте или модуле, что и хотелось ранее реализовать и из-за чего собственно и вышла ошибка, а именно:
Цитата:
Fatal error: Call to a member function getInfo() on a non-object in Z:\home\1.ru\www\modules\mod_topmembers\tmpl\default.php on line 33  

 
Еще раз. Я хочу показать Страну и город в другом месте на сайте, но чтобы они показались это нужно дописать или добавить дополнительный код к <?php echo $row->user->getInfo('FIELD_COUNTRY'); ?>  и <?php echo $row->user->getInfo('FIELD_CITY'); ?>. Вопрос с чего начать?
 
C выше предложенным ясно, что $row->user не является объектом. откуда $row берется не известно.
Как я понимаю, что $row берется с этого кода:
Подробнее...
Верно??

Всего записей: 44 | Зарегистр. 07-01-2012 | Отправлено: 08:35 16-08-2015 | Исправлено: 323182, 09:26 16-08-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
323182
используйте тег more форума, чтобы не забивать пространство листингами.
 

Цитата:
Вопрос с чего начать?  

с получения экземляра объекта, описывающего пользователя.
в первоначальном вариант откуда то получается массив $data, который потом в цикле, каждый элемент как переменная $row, обрабатывается

Код:
 foreach( $data as $row )

спрашивать такую специфику (откуда и как берется) лучше в теме по данному движку - Портал Joomla (часть 2)
Чтобы использовать этот кусок где то еще, нужно чтобы были либо аналогичные данные, либо, как написал выше, готовый экземпляр класса нужного пользователя.
 
Данные в $data скорее всего получаются в каком то контроллере CMS (почитайте что такое MVC - архитектура - https://ru.wikipedia.org/wiki/Model-View-Controller ), а потом передаются в движок шаблона, как описано тут  
https://docs.joomla.org/J3.x:Sharing_layouts_across_views_or_extensions_with_JLayout
 
Вот явная передача данных из контроллера в движок шаблона

Код:
$layout      = new JLayoutFile('joomla.sidebars.submenu', $basePath = null);
$sidebarHtml = $layout->render($data);

 
То есть в шаблон той страницы, которую хотите отображать с пользователем, данные должны сначала как то попасть. А это уже специфика данной CMS Joomla.
 
Внутри же шаблона запросов к базе не делают.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 09:21 16-08-2015 | Исправлено: Mavrikii, 09:28 16-08-2015
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » Вывод информации о пользователе на сайте


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru