Создание личных фотоальбомов, перед загрузкой фото

#16 10 мая 2012 в 18:28
Мужики, вы друг друга благодарите, но и про вселенную не забывайте, которая вас свела и других пользователей, как ее часть )))
В общем, когда будет решение, вы его оформите, чтобы можно было понять, где конечное рабочее и как это выглядит во фронт-энде.
Спасибо )
#17 10 мая 2012 в 18:56

В общем, когда будет решение, вы его оформите, чтобы можно было понять, где конечное рабочее и как это выглядит во фронт-энде.
Спасибо )

spacer
и так создание личных фотоальбомов работает)))
в components/users/router.php добавил
  1. $routes[] = array(
  2. '_uri' => '/^users\/([0-9]+)\/nevphotoalbum.html$/i',
  3. 'do' => 'new_album',
  4. 1 => 'id',
  5. );
  6.  
В components/users/frontend.php добавляем
  1. /////////////////////////////// new album /////////////////////////////////////////////////////////////////////////////////////////
  2. if ($do=='new_album'){
  3. if ($id != $inUser->id) { cmsCore::error404(); }
  4.  
  5. $is_send = $inCore->inRequest('send');
  6.  
  7. if (!$is_send){
  8. $smarty = $inCore->initSmarty('components', 'com_users_nevphotoalbum.tpl');
  9. $smarty->display('com_users_nevphotoalbum.tpl');
  10. }
  11. if ($is_send){
  12. $album['user_id'] = $id;
  13. $album['title'] = $inCore->request('album_title');
  14. if (!$album['title']){
  15.  
  16. //сохраняем текст ошибки в сессию
  17. cmsCore::addSessionMessage('Укажите название альбома!', 'error');
  18.  
  19. //и делаем редирект обратно на форму, завершая выполнение скрипта
  20. $inCore->redirectBack(); exit;
  21.  
  22. }
  23. $album_id = $model->addPhotoAlbum($album);
  24.  
  25. if ($album_id){
  26. //сохраняем текст успеха в сессию
  27. cmsCore::addSessionMessage('альбом успешно создан!', 'success');
  28. $inCore->redirect('/users/'.$id.'/photoalbum.html'); exit;
  29.  
  30. }
  31.  
  32. //5. если по каким-то причинам альбом не создался
  33. if (!$album_id){
  34. //сохраняем текст неудачи
  35. cmsCore::addSessionMessage('Ошибка создания альбома!', 'error');
  36. }
  37.  
  38.  
  39. }
  40. }
  41.  
в файле /components/users/model.php изменям сам метод getPhotoAlbums() на
  1. public function getPhotoAlbums($user_id, $is_friends=false, $only_private=false) {
  2.  
  3. $inUser = cmsUser::getInstance();
  4. $is_my = $inUser->id == $user_id || $inUser->is_admin;
  5. $is_friends = (int)$is_friends;
  6. $filter = '';
  7. $albums = array();
  8.  
  9. if (!$is_my){
  10. $filter = "AND (
  11. a.allow_who='all'
  12. OR
  13. (a.allow_who='registered' AND ({$inUser->id}>0))
  14. OR
  15. (a.allow_who='friends' AND ({$is_friends}=1))
  16. )";
  17. }
  18.  
  19. $sql = "SELECT a.id as id,
  20. a.title as title,
  21. a.pubdate as pubdate,
  22. a.allow_who as allow_who,
  23. 'private' as type,
  24. p.imageurl as imageurl,
  25. COUNT(p.id) as photos_count
  26. FROM cms_user_albums a
  27. LEFT JOIN cms_user_photos p ON p.album_id = a.id
  28. WHERE a.user_id='{$user_id}' {$filter}
  29. GROUP BY a.id";
  30. $result = $this->inDB->query($sql);
  31.  
  32. if ($this->inDB->num_rows($result)) {
  33. while($album = $this->inDB->fetch_assoc($result)){
  34. if (!$album['imageurl']){
  35. $album['imageurl'] = "/images/users/photos/small/no_cover.gif";}
  36. else {
  37.  
  38. $album['imageurl'] = "/images/users/photos/small/{$album['imageurl']}";}
  39.  
  40.  
  41. $album['pubdate'] = cmsCore::dateFormat($album['pubdate']);
  42. $albums[] = $album;
  43. }
  44. }
  45. $albums = cmsCore::callEvent('GET_USER_ALBUMS', $albums);
  46.  
  47. return $albums;
  48.  
  49. }
  50.  
  51.  
  52.  
в вашем шаблоне в папке components создаём файл com_users_nevphotoalbum.tpl с содержимым
  1. <h1 class="con_heading">создание альбома</h1>
  2.  
  3.  
  4. <form action="" method="post">
  5.  
  6. <div>название льбома:</div>
  7. <div>
  8. <input type="text" name="album_title" />
  9. </div>
  10. <div>
  11. <input type="submit" name="send" value="создать" />
  12. </div>
  13. </form>
в папку /images/users/photos/small/ загружаем картинку которую вы хотите подставлять в альбом где нет фотографий с названием no_cover.gif
в шаблоне components/com_users_albums.tpl в удобное для вас место ставим ссылку на создание альбома
  1. {if $my_profile}
  2. <div class="float_bar">
  3. <a href="/users/{$user.id}/nevphotoalbum.html" class="usr_photo_add">создать альбом</a>
  4. </div>
  5. {/if}
  6.  
посмотреть можно у меня на сайте
сайт
логин test
пароль test11
просьба после создания альбома удалите его (чтобы небыло куча пустых альбомов)
ну вот пока и всё )))
#18 13 мая 2012 в 01:09
И так продолжим)))
даём каждому пользователю альбом под названием "Личные фотографии"
делаем для новых зарегестрированых пользователей:
Создание альбома при регистрации. В файле /components/registration/frontend.php после строчек 238-239
  1. $user_array['id'] = $new_user_id; cmsCore::callEvent('USER_REGISTER', $user_array);
  2.  
вставьте вот этот кусок кода:
  1. //создаем личный фотоальбом пользователя
  2. $album = array();
  3. $album['user_id'] = $new_user_id;
  4. $album['title'] = 'Личные фотографии';
  5. $inCore->loadModel('users');
  6. $model = new cms_model_users();
  7. $model->addPhotoAlbum($album);
теперь переименуем первый созданый альбом у уже зарегестрированых пользователей в "Личные фотографии" и у пользователей которых нет альбома создадим его:
скачиваем прикреплёный файл закидываем его в корень сайта и вызываем его перейдя по ссылке
(ваш сайт).ru/create_new_albums.php
он сработает если пользователь администратор
ну пока и всё теперь у каждого пользователя есть альбом "Личные фотографии" и он первый созданный (в дальнейшем он нам пригодится).
Очередной раз выражаю благодарность за написание и обьяснение скрипта и кодов пользователя Марат
Прикрепленный файл
createnewalbums_6ddvs.rar 2 Кб
#19 13 мая 2012 в 01:21
Просьба модераторов сайта переименовать тему форума (так как я ненашёл где это сделать) в "Изменения личных фотоальбомов пользователя" так как дальнейшее изменение будет касаться не только создания альбомов но и редактирование и вывод альбомов и фотографий.
#20 13 мая 2012 в 15:44
всем доброго времени суток!!!
продолжаем тему :
сделаем страницу которая будет открыватся при нажатии в профиле или юзер меню пункт фотографии
(сейчас в движке открывается страница фотоальбомов)
и так открываем файл components/users/router.php
и туда вставляем код
  1. $routes[] = array(
  2. '_uri' => '/^users\/([0-9]+)\/photo.html$/i',
  3. 'do' => 'viewphot',
  4. 1 => 'id',
  5. 'page' => '1'
  6.  
  7. );
  8.  
открываем файд components/users/model.php и вставляем код
  1. public function getAlbumPhot($user_id, $album_type, $album_id, $is_friends=false) {
  2.  
  3. $inUser = cmsUser::getInstance();
  4. $is_my = $inUser->id == $user_id;
  5. $is_friends = (int)$is_friends;
  6. $filter = '';
  7. $photos = array();
  8.  
  9.  
  10. if (!$is_my){
  11. $filter = "AND (
  12. allow_who='all'
  13. OR
  14. (allow_who='registered' AND ({$inUser->id}>0))
  15. OR
  16. (allow_who='friends' AND ({$is_friends}=1))
  17. )";
  18. }
  19.  
  20. //Получаем личные фотографии
  21. $private_sql = "SELECT p.id, p.pubdate, p.imageurl as file, p.hits, p.title
  22. FROM `cms_user_photos` p LEFT JOIN `cms_user_albums` a ON a.id = p.album_id
  23. WHERE p.user_id = '{$user_id}' AND a.title = 'Личные фотографии'
  24. ORDER BY id DESC";
  25.  
  26. $private_res = $this->inDB->query($private_sql);
  27.  
  28. if ($this->inDB->num_rows($private_res)) {
  29. while($photo = $this->inDB->fetch_assoc($private_res)){
  30. $photo['file'] = '/images/users/photos/small/'.$photo['file'];
  31. $photo['url'] = '/users/'.$user_id.'/photo'.$photo['id'].'.html';
  32. $photo['fpubdate'] = cmsCore::dateFormat($photo['pubdate']);
  33. $photos[] = $photo;
  34. }
  35. }
  36.  
  37.  
  38.  
  39.  
  40. return $photos;
  41.  
  42. }
  43.  
  44. public function getPhotoAlb($user_id, $is_friends=false, $only_private=false) {
  45.  
  46. $inUser = cmsUser::getInstance();
  47. $is_my = $inUser->id == $user_id || $inUser->is_admin;
  48. $is_friends = (int)$is_friends;
  49. $filter = '';
  50. $albums = array();
  51.  
  52. if (!$is_my){
  53. $filter = "AND (
  54. a.allow_who='all'
  55. OR
  56. (a.allow_who='registered' AND ({$inUser->id}>0))
  57. OR
  58. (a.allow_who='friends' AND ({$is_friends}=1))
  59. )";
  60. }
  61.  
  62. $sql = "SELECT a.id as id,
  63. a.title as title,
  64. a.pubdate as pubdate,
  65. a.allow_who as allow_who,
  66. 'private' as type,
  67. p.imageurl as imageurl,
  68. COUNT(p.id) as photos_count
  69. FROM cms_user_albums a
  70. LEFT JOIN cms_user_photos p ON p.album_id = a.id
  71. WHERE a.user_id='{$user_id}' {$filter}
  72. AND a.title != 'Личные фотографии'
  73. GROUP BY a.id";
  74. $result = $this->inDB->query($sql);
  75.  
  76. if ($this->inDB->num_rows($result)) {
  77. while($album = $this->inDB->fetch_assoc($result)){
  78. if (!$album['imageurl']){
  79. $album['imageurl'] = "/images/users/photos/small/no_cover.gif";
  80. }else {
  81.  
  82. $album['imageurl'] = "/images/users/photos/small/{$album['imageurl']}";
  83. }
  84.  
  85.  
  86. $album['pubdate'] = cmsCore::dateFormat($album['pubdate']);
  87. $albums[] = $album;
  88. }
  89. }else{
  90. $sql = "SELECT a.id as id,
  91. a.title as title,
  92. a.pubdate as pubdate,
  93. a.allow_who as allow_who,
  94. 'private' as type,
  95. p.imageurl as imageurl,
  96. COUNT(p.id) as photos_count
  97. FROM cms_user_albums a
  98. LEFT JOIN cms_user_photos p ON p.album_id = a.id
  99. WHERE a.user_id='{$user_id}' {$filter}
  100. GROUP BY a.id";
  101. $result = $this->inDB->query($sql);
  102.  
  103. if ($this->inDB->num_rows($result)) {
  104. while($album = $this->inDB->fetch_assoc($result)){
  105. if (!$album['imageurl']){
  106. $album['imageurl'] = "/images/users/photos/small/no_cover.gif";}
  107. else {
  108.  
  109. $album['imageurl'] = "/images/users/photos/small/{$album['imageurl']}";}
  110.  
  111.  
  112. $album['pubdate'] = cmsCore::dateFormat($album['pubdate']);
  113. $albums[] = $album;
  114. }
  115. }
  116. }
  117. $albums = cmsCore::callEvent('GET_USER_ALBUMS', $albums);
  118.  
  119. return $albums;
  120.  
  121. }
  122.  
  123.  
далее открываем components/users/frontend.php
и вставляем код
  1. //============================================================================//
  2. //=== вывод фотоальбомов и фотографий из личного альбома фотографии===========//
  3. //============================================================================//
  4.  
  5. if ($do=='viewphot'){
  6.  
  7. if (!$cfg['sw_photo']) { cmsCore::error404(); }
  8.  
  9. $usr = $model->getUserShort($id);
  10.  
  11. if (!$usr){ cmsCore::error404(); }
  12.  
  13. //Мой профиль или нет
  14. $my_profile = ($inUser->id == $id);
  15.  
  16. //Определяем, друзья мы или нет
  17. $we_friends = ($inUser->id && !$my_profile) ? (int)usrIsFriends($usr['id'], $inUser->id) : 0;
  18. if (!$we_friends) { $we_friends = 0; }
  19. $albums = $model->getPhotoAlb($id, $we_friends);
  20. $photos = $model->getAlbumPhot($usr['id'], $album_type, $album_id, $we_friends);
  21.  
  22.  
  23. $inPage->setTitle($_LANG['PHOTOALBUMS']);
  24. $inPage->addPathway($usr['nickname'], cmsUser::getProfileURL($usr['login']));
  25. $inPage->addPathway($_LANG['PHOTOALBUMS']);
  26.  
  27. //Отдаем в шаблон
  28. $smarty = $inCore->initSmarty('components', 'com_users_photo.tpl');
  29. $smarty->assign('albums', $albums);
  30. $smarty->assign('my_profile', $my_profile);
  31. $smarty->assign('user', $usr);
  32. $smarty->assign('photos', $photos);
  33. $smarty->assign('user_id', $id);
  34.  
  35. $smarty->display('com_users_photo.tpl');
  36. }
  37.  
далее открываем папку templates/(ваш шаблон)/components/ и создаём файл com_users_photo.tpl с содержимым
  1. {if $my_profile}
  2. <div class="usr_albums_name"
#21 13 мая 2012 в 16:17
забыл написать в профиле и в меню юзер замените ссылки <a href="/users/{$usr.id}/photoalbum.html"> на <a href="/users/{$usr.id}/photo.html">
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.