22:05
128

Посты пользователя в его профиле

Вопрос или задание

Можно ли как-то вывести посты в профиле пользователя?

Подписаться
5
User6+1
Natalia Onischuk+1
User4+1
ещё 2

Ответы и решения

23:09
39 просмотров

1 Откройте файл шаблона профиля templates\шаблон\controllers\users\profile_view.tpl.php и в самом начале файла вставьте код:

<?php $is_profile = cmsCore::getInstance()->uri === 'users/'.$profile['id']; if($is_profile){ function profilePosts($profile, $ctype_name = false, $folder_id = false, $dataset = false) { $lock_explicit_call = true; if (!$ctype_name) { return false; } $template = cmsTemplate::getInstance(); $user = cmsUser::getInstance(); $controller = cmsCore::getController('content'); $controllerUsers = cmsCore::getController('users'); $ctype = $controller->model->getContentTypeByName($ctype_name); if (!$ctype) { return false; } if (!$ctype['options']['profile_on']) { return cmsCore::error404(); } if (!$user->isPrivacyAllowed($profile, 'view_user_'.$ctype['name'])){ return false; } $original_folder_id = $folder_id; if($folder_id && !$dataset && !is_numeric($folder_id)){ $dataset = $folder_id; $folder_id = false; } $controller->setListContext('profile_content'); // Получаем список наборов $datasets = $controller->getCtypeDatasets($ctype, array( 'cat_id' => 0 )); $folders = array(); if ($ctype['is_folders']){ $folders = $controller->model->getContentFolders($ctype['id'], $profile['id']); if ($folders){ if ($folder_id && array_key_exists($folder_id, $folders)){ $controller->model->filterEqual('folder_id', $folder_id); } } } $controller->model->filterEqual('user_id', $profile['id']); list($folders, $controller->model, $profile, $original_folder_id) = cmsEventsManager::hook("user_content_{$ctype['name']}_folders", array( $folders, $controller->model, $profile, $original_folder_id )); // Если есть наборы, применяем фильтры текущего $current_dataset = array(); if ($datasets){ $keys = array_keys($datasets); if(!$dataset){ $dataset = $keys[0]; } if($dataset && !empty($datasets[$dataset])){ $current_dataset = $datasets[$dataset]; $controller->model->applyDatasetFilters($current_dataset); // устанавливаем максимальное количество записей для набора, если задано if(!empty($current_dataset['max_count'])){ $controller->max_items_count = $current_dataset['max_count']; } // если набор всего один, например для изменения сортировки по умолчанию, // не показываем его на сайте if(count($datasets) == 1){ $current_dataset = array(); $datasets = false; } } else { if($dataset && $folder_id === false && $original_folder_id === false){ return false; } } } if ($folders){ $folders = array('0' => array('id' => '0', 'title' => LANG_ALL)) + $folders; } if ($user->id != $profile['id'] && !$user->is_admin){ $controller->model->enableHiddenParentsFilter(); } if ($user->id == $profile['id'] || $user->is_admin){ $controller->model->disableApprovedFilter()->joinModerationsTasks($ctype['name']); $controller->model->disablePubFilter(); $controller->model->disablePrivacyFilter(); } list($ctype, $profile) = cmsEventsManager::hook('content_before_profile', array($ctype, $profile)); if ($folder_id){ $page_url = href_to_profile($profile, array('content', $ctype_name, $folder_id)); } else { $page_url = href_to_profile($profile, array('content', $ctype_name)); } $list_html = $controller->renderItemsList($ctype, $page_url.($dataset ? '/'.$dataset : ''), false, 0, [], $dataset); $list_header = empty($ctype['labels']['profile']) ? $ctype['title'] : $ctype['labels']['profile']; if($current_dataset && $dataset){ $list_header .= ' / '.$current_dataset['title']; } $toolbar_html = cmsEventsManager::hookAll('content_toolbar_html', array($ctype['name'], array(), $current_dataset, array( array( 'field' => 'user_id', 'condition' => 'eq', 'value' => $profile['id'] ), array( 'field' => 'folder_id', 'condition' => 'eq', 'value' => $folder_id ) ))); return $template->renderInternal($controllerUsers, 'profile_content', array( 'filter_titles' => $controller->getFilterTitles(), 'user' => $user, 'toolbar_html' => $toolbar_html, 'id' => $profile['id'], 'profile' => $profile, 'ctype' => $ctype, 'folders' => $folders, 'folder_id' => $original_folder_id, 'datasets' => $datasets, 'dataset' => $dataset, 'current_dataset' => $current_dataset, 'base_ds_url' => $page_url . '%s', 'list_header' => $list_header, 'html' => $list_html )); } } ?>


2 Там где нужно, например перед выводом Стены вставьте этот код: 

<?php if($is_profile){
$pfl_ctype = 'posts'; // системное имя выводимого типа контента
?> <style> #profilePosts{ padding:0 20px; margin-bottom:40px; } #profilePosts #user_profile_title, #profilePosts .filter-panel.posts-filter{display:none;} </style> 
<div id="profilePosts"> <?php echo profilePosts($profile,$pfl_ctype); ?></div> 
<?php  }  ?>


п.с. Стену пользователя можно найти по следующему коду:

<?php if ($wall_html){ ?> <div id="user_profile_wall"> <?php echo $wall_html; ?> </div> <?php  }  ?>
14:53

Посты пользователя в его профиле можно вывести дополнением Контент пользователя

Загрузка...