Аватар в сайдбаре 2.х

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

Помогите

#1 14 января 2015 в 18:02
Друзья, с но вым годом. Может в этой ветке нужно создать этот вопрос.
Я веб дизайнер, с php туговато, но хотел под себя кое-что выпилить и поделься (так сказать внести свой вклад), но немного застрял.

Так вот, надобность появилась, чтобы при заходе на страницу пользователя аватар показывался в правой колонке. Т.е. внутри <aside></aside>.
В страндарте есть виджет аватар, но он показывает только аватар пользователя, который залогинился. А хотелось бы чтобы пользователь зайдя на чужую страницу видел чужой аватар.

Что сделано: создан виджет (папки и файлы виждета, запрос в базу).
В файле шаблона виджета прописал следующее:

  1.  
  2. <div class="name">
  3. <a href="<?php echo $this->href_to($profile['id']); ?>"><?php html($profile['nickname']); ?></a>
  4. </div>
  5.  
  6. <div id="avatar" class="block">
  7. <?php echo html_avatar_image($profile['avatar'], 'normal'); ?>
  8. </div>
  9.  
А вот в файле widget.php тормознул, вроде надо прописать правило для $profile, но не получилось.
Пожалуйста помогите правильно дополнить сожержимое, вот что есть сейчас:

  1.  
  2. <?php
  3. class widgetUsersНАЗВАНИЕПАПКИ extends cmsWidget {
  4.  
  5. public $is_cacheable = false;
  6.  
  7. public function run(){
  8.  
  9.  
  10.  
  11.  
  12.  
  13. return array(
  14. 'profile' => $profile,
  15.  
  16. );
  17.  
  18. }
  19.  
  20. }
Пожалуйста подскажите как дополнить код. Заранее спасибо.
#2 15 января 2015 в 11:26
Получить профиль по ID из базы:
  1. $profile = cmsCore::getModel('users')->getUser($id);
но для этого нужно знать id
его можно пытаться выдернуть из адреса текущей страницы с помощью регулярных выражений
адрес текущей страницы можно получить так:
  1. cmsCore::getInstance()->uri
далее используйте preg_match()
чтобы проверить адрес на соответствие шаблону /^users/([0-9]+)$/i и получить id
#3 15 января 2015 в 17:26
Сделал так
  1.  
  2. $profile = cmsCore::getModel('users')->getUser($id);
  3. cmsCore::getInstance()->uri;
  4. preg_match('/^users/([0-9]+)$/i', $id);
  5.  
Но выводит ошибку
Warning: preg_match() [function.preg-match]: Unknown modifier '(' in ...\system\controllers\users\widgets\pcavatar\widget.php on line 13
#4 15 января 2015 в 18:04
  1. $uri = cmsCore::getInstance()->uri;
  2. preg_match('/^users\/([0-9]+)$/i', $uri, $res);
  3. $id = $res[1];
  4. $profile = cmsCore::getModel('users')->getUser($id);
#5 15 января 2015 в 18:57
IngDesign, r2, искренне благодарю вас за помощь! Огромнейшее человеческое спасибо!
А каким образом сделать выборку id, на странице, в адресе которой он не присутствует?
Например вывести то же на странице поста пользователя?
#6 15 января 2015 в 19:56
Напрямую — никак.
Если очень нужно, можно достать id записи и тип контента, сделать выборку по этим данным, и получить значение поля user_id
#7 16 января 2015 в 00:21


Если очень нужно...

IngDesign
Очень нужно. Очень.
#8 16 января 2015 в 01:39
Так же попытался вставить в этот же виджет некоторые поля из профиля:
в widget.php вставил
  1. $fieldsets = cmsForm::mapFieldsToFieldsets($fields, function($field, $user){
  2. if (in_array($field['name'], array('nickname', 'avatar'))){ return false; }
  3. return true;
  4. }, $profile);
в виджет.tpl.php вставил
  1.  
  2. <?php foreach($fieldsets as $fieldset){ ?>
  3.  
  4. <?php if (!$fieldset['fields']) { continue; } ?>
  5.  
  6. <div class="fieldset">
  7.  
  8. <?php if ($fieldset['title']){ ?>
  9. <div class="fieldset_title">
  10. <h3><?php echo $fieldset['title']; ?></h3>
  11. </div>
  12. <?php } ?>
  13.  
  14. <?php foreach($fieldset['fields'] as $field){ ?>
  15.  
  16. <?php if (empty($profile[$field['name']])) { continue; } ?>
  17. <?php if ($field['groups_read'] && !$user->isInGroups($field['groups_read'])) { continue; } ?>
  18.  
  19. <?php
  20. if (!isset($field['options']['label_in_item'])) {
  21. $label_pos = 'none';
  22. } else {
  23. $label_pos = $field['options']['label_in_item'];
  24. }
  25. ?>
  26.  
  27. <div class="field ft_<?php echo $field['type']; ?> f_<?php echo $field['name']; ?>">
  28.  
  29. <?php if ($label_pos != 'none'){ ?>
  30. <div class="title title_<?php echo $label_pos; ?>"><?php echo $field['title']; ?>: </div>
  31. <?php } ?>
  32.  
  33. <div class="value">
  34.  
  35. <?php
  36.  
  37. echo $field['handler']->parse( $profile[$field['name']] );
  38.  
  39. ?>
  40.  
  41. </div>
  42.  
  43. </div>
  44.  
  45. <?php } ?>
  46.  
  47. </div>
  48.  
  49. <?php } ?>
Но махинация не удалась, выдает ошибку, в чем может быть дело?
#9 27 января 2015 в 17:14
Ворос закрыт.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.