форум vBSupport.ru > vBulletin > vBulletin 3.8.x > Вопросы по vBulletin 3.8
Register Меню vBsupport Изображения Files Manager О рекламе Today's Posts Search
  • Родная гавань
  • Блок РКН снят
  • Premoderation
  • For English speaking users
  • Каталог Фрилансеров
  • If you want to buy some product or script
  • Администраторам
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже:
Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
Gostemilov
Специалист
Default SQL - запрос в кроне или дас ист фантастиш
0

Продолжается увлекательный секс-марафон под названием "Добавим категории в альбомы". Не спрашивайте, как я до этого докатился.

Суть задачи: вывести на главную превью новых изображений в каждой категории. Вот так приблизительно: http://photo-continent.ru/. Это все хорошо и это все работает. Но! Для вывода такого счастья при 30 категориях требуется аж 60 запросов, что не лезет вообще ни в какие рамки.

Было принято решение создать временную таблицу и тогда все должно было стать гут и карашо. Но! В каталоге cron создаю latest.php с весьма даже немудреным кодом, например:

PHP Code:
            $delsql $vbulletin->db->query_write("DELETE FROM " TABLE_PREFIX "aa_picture WHERE catid = $i");
            if (!
delsql){echo "<h1>АПШИПКА</h1>";} 
Какие я только запросы не писал - не отрабатываются в принципе. Причем, тот же код, повешенный как модуль форума или модуль CMPS отрабатывает на ура.

В чем может быть причина того, что при запуске скрипта по крону не отрабатывается SQL запрос? А?
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
kerk
k0t
 
kerk's Avatar
Default
0

а запрос вывода картинок по категориям можно посмотреть?
у нас на главной выводятся темы из нескольких разделов форума (примерно то же самое по структуре)
отображение тем, в блоках по разделам
- Категория
-- Раздел
---- темы
один запрос в БД
 
 
Gostemilov
Специалист
Default
0

Гм..... Мне бы еще сообразить как я вообще это сделал.... :( ладно попробую.

за основу взять модуль CMPS "latest album pictures"

На крон я пробую повесить вот что-то вроде этого: (как модуль CMPS оно работает)

PHP Code:

<?php
if($permissions['genericpermissions'] & $vbulletin->bf_ugp_genericpermissions['canviewmembers'
AND 
$permissions['albumpermissions'] & $vbulletin->bf_ugp_albumpermissions['canviewalbum'
AND 
$vbulletin->options['socnet'] & $vbulletin->bf_misc_socnet['enable_albums']
)
        
{
        if(!
function_exists('prepare_pictureinfo_thumb')) { require_once(DIR '/includes/functions_album.php'); }
        
$neyegore '';
        
        switch(
$mod_options['album_pictures_sortorder']) {
        case 
0: { $neyegore 'ORDER BY albumpicture.dateline ASC'; } break;
        case 
1: { $neyegore 'ORDER BY albumpicture.dateline DESC'; } break;
        case 
2: { $neyegore 'ORDER BY RAND()'; } break;
        default: { } break; }

        if(
$mod_options['album_picture_users'] != '')
        { 
$getpicturesuser 'album.userid IN ('.$mod_options['album_picture_users'].')'; }

        if(!(
can_moderate(0'caneditalbumpicture')) OR !(can_moderate(0'candeletealbumpicture')))
        { 
$getpicturesstate = (($getpicturesuser) ? ' AND' '') . ' (album.state = \'public\' OR (NOT ISNULL(userlist.relationid) AND album.state = \'private\'))'; }

        
$getpicturesstate = (($getpicturesuser) ? ' AND' '') . ' (album.state = \'public\' OR (NOT ISNULL(userlist.relationid) AND album.state = \'private\'))';






        for (
$i 1$i <= 30$i++) {

            
$cat "cat".$i;
            
$albumcat "albumcat".$i;
            
$albumlist "";
            
$albumscat="";
            
$albumscat[]=0;
            
$albumpictures="";

            
$data $vbulletin->db->query_read_slave("SELECT albumid FROM " TABLE_PREFIX " album WHERE album.$cat = 1");

            
$y=0;
                while(
$row=mysql_fetch_assoc($data)){
                    
$y++;
                    
$albumscat[]=$row[albumid];
                }


            echo 
'<hr>В категории '.$i.' '.$y.' альбомов';
            
$albumlist "";
            
$albumlist=implode(",",$albumscat);
            echo 
"<hr>".$albumlist."<hr>";

            
//Удаляем из временной таблицы старые данные
            
$delsql $vbulletin->db->query_write("DELETE FROM " TABLE_PREFIX "aa_picture WHERE catid = $i");
            if (!
delsql){echo "<h1>Ошибка удаления</h1>";}


             
mysql_free_result($result);

        
$resimler $vbulletin->db->query_read_slave("
        SELECT user.userid, user.username, user.usergroupid, 
        IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid,
        albumpicture.dateline, picture.pictureid, picture.userid, picture.extension,
        picture.idhash, picture.thumbnail_filesize, picture.title,picture.views,picture.width,picture.height,picture.caption AS caption,
        picture.thumbnail_dateline, picture.thumbnail_width, picture.thumbnail_height,picture.filesize,
        album.albumid AS albumid, album.title AS albumstitle
        FROM " 
TABLE_PREFIX "albumpicture AS albumpicture
        INNER JOIN " 
TABLE_PREFIX "picture AS picture ON (albumpicture.pictureid = picture.pictureid)
        INNER JOIN " 
TABLE_PREFIX "album AS album ON (albumpicture.albumid = album.albumid)
        LEFT JOIN " 
TABLE_PREFIX "user AS user ON(user.userid = album.userid)
        LEFT JOIN " 
TABLE_PREFIX "userlist AS userlist ON(userlist.userid = album.userid AND userlist.relationid = '" $vbulletin->userinfo['userid'] . "' AND userlist.type = 'buddy')
        " 
. (($getpicturesuser OR $getpicturesstate) ? 'WHERE albumpicture.albumid IN ('.$albumlist.')  AND ' $getpicturesuser $getpicturesstate '') . $neyegore  LIMIT 0, " $mod_options['album_picture_count'] . "
        "
);






        while(
$picture $vbulletin->db->fetch_array($resimler))
        {
            echo 
"<br />Обработать фото ";
            echo 
$picture[pictureid].",";

            
//Во временную твблицу новые данные
            
$inssql $vbulletin->db->query_write(
            
"INSERT INTO " TABLE_PREFIX "aa_picture (pictureid,catid,userid,views,title,caption,extension,idhash,thumbnail_filesize,thumbnail_width,thumbnail_height,thumbnail_dateline,width,height,filesize) 
            VALUES (
$picture[pictureid],$i,$picture[userid],$picture[views],'".$picture[title]."','".$picture[caption]."','".$picture[extension]."','".$picture[idhash]."',$picture[thumbnail_filesize],$picture[thumbnail_width],$picture[thumbnail_height],$picture[thumbnail_dateline],$picture[width],$picture[height],$picture[filesize])");
            if (!
insql){echo "<h1>Ошибка записи</h1>";}

        }




}

}
?>
Здаесь получается 30 запросов, поэтому я и хочу повесить это дело на крон и отрабатывать раз в полчаса-час 1 раз. Этого вполне хватит.

Далее - собственно вывод, то есть тот же самый модуль Latest Album Pictures, но на сей раз при обработке задница была повернута под другим углом:

PHP Code:
<?php
if($permissions['genericpermissions'] & $vbulletin->bf_ugp_genericpermissions['canviewmembers'
AND 
$permissions['albumpermissions'] & $vbulletin->bf_ugp_albumpermissions['canviewalbum'
AND 
$vbulletin->options['socnet'] & $vbulletin->bf_misc_socnet['enable_albums']
)
        
{
        if(!
function_exists('prepare_pictureinfo_thumb')) { require_once(DIR '/includes/functions_album.php'); }
        
$neyegore '';
        
        switch(
$mod_options['album_pictures_sortorder']) {
        case 
0: { $neyegore 'ORDER BY albumpicture.dateline ASC'; } break;
        case 
1: { $neyegore 'ORDER BY albumpicture.dateline DESC'; } break;
        case 
2: { $neyegore 'ORDER BY RAND()'; } break;
        default: { } break; }

        if(
$mod_options['album_picture_users'] != '')
        { 
$getpicturesuser 'album.userid IN ('.$mod_options['album_picture_users'].')'; }

        if(!(
can_moderate(0'caneditalbumpicture')) OR !(can_moderate(0'candeletealbumpicture')))
        { 
$getpicturesstate = (($getpicturesuser) ? ' AND' '') . ' (album.state = \'public\' OR (NOT ISNULL(userlist.relationid) AND album.state = \'private\'))'; }

$getpicturesstate = (($getpicturesuser) ? ' AND' '') . ' (album.state = \'public\' OR (NOT ISNULL(userlist.relationid) AND album.state = \'private\'))';



    
mysql_free_result($result);


     
mysql_free_result($result);
        
$resimler $vbulletin->db->query_read_slave("
        SELECT user.userid, user.username, user.usergroupid, 
        IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid,
        albumpicture.dateline, aa_picture.catid,aa_picture.pictureid, aa_picture.userid, aa_picture.extension,
        aa_picture.idhash, aa_picture.thumbnail_filesize, aa_picture.title,aa_picture.views,aa_picture.width,aa_picture.height,aa_picture.caption AS caption,
        aa_picture.thumbnail_dateline, aa_picture.thumbnail_width, aa_picture.thumbnail_height,aa_picture.filesize,
        album.albumid AS albumid, album.title AS albumstitle
        FROM " 
TABLE_PREFIX "albumpicture AS albumpicture
        INNER JOIN " 
TABLE_PREFIX "aa_picture AS aa_picture ON (albumpicture.pictureid = aa_picture.pictureid)
        INNER JOIN " 
TABLE_PREFIX "album AS album ON (albumpicture.albumid = album.albumid)
        LEFT JOIN " 
TABLE_PREFIX "user AS user ON(user.userid = album.userid)
        LEFT JOIN " 
TABLE_PREFIX "userlist AS userlist ON(userlist.userid = album.userid AND userlist.relationid = '" $vbulletin->userinfo['userid'] . "' AND userlist.type = 'buddy')
        " 
. (($getpicturesuser OR $getpicturesstate) ? 'WHERE aa_picture.catid = 20  AND ' $getpicturesuser $getpicturesstate '') . " ORDER BY albumpicture.dateline DESC  LIMIT 0, 4");


$getpicturesstate '') . $neyegore  LIMIT 0, " $mod_options['album_picture_count'] . "

        
$colspan = 0;
        
$bgclass = exec_switch_bg();
        while(
$picture = $vbulletin->db->fetch_array($resimler))
        {
          if(
$mod_options['album_pictures_perrow'] == $colspan)
          {
          
$bgclass = exec_switch_bg();
          
$perrow = '</tr><tr valign="top">';
          
$colspan = 0;
          } 
          else 
          { 
          
$perrow = ''; 
          }

        
$picture = prepare_pictureinfo_thumb($picture, array('albumid' => $picture['albumid']));
        
$picture['musername'] = fetch_musername($picture);

        if(
$mod_options['album_picture_description'])
        {
        if(
$mod_options['album_picture_description_characters'])
        {
        
$picture['caption'] = fetch_trimmed_title($picture['caption'], $mod_options['album_picture_description_characters']);
        }
        require_once(DIR . '/includes/class_bbcode.php');
        
$parser =& new vB_BbCodeParser($vbulletin, fetch_tag_list());
        
$picture['caption'] = $parser->do_parse($picture['caption'], 1);
        } 
        else 
        { 
        
$picture['caption'] = ''; 
        }

        eval('
$albumpictures .= "' . fetch_template('adv_portal_album_pictures_bit') . '";');
        
        
$colspan++; 
        }
        
        
$db->free_result($resimler);
        
        if(!
$albumpictures) { $albumpictures = '<td class="alt1" colspan="'.$mod_options['album_pictures_perrow'].'">' . $vbphrase['no_pictures_found'] . '</td>'; }
        
        eval('
$home[$mods[\'modid\']][\'content\'] = "' . fetch_template('adv_portal_album_pictures') . '";');
        
        unset(
$albumpictures$bgclass$colspan$perrow$neyegore);
}
?>
Вот это отвечает за формирование вывода 4 последних картинок из альбомов, принадлежащих категории 1.

Только не надо сразу за обрез или бейсбольную биту, я это не выдаю даже за полуфабрикат

Gostemilov добавил 25.06.2013 в 20:00
Quote:
Originally Posted by kerk View Post
а запрос вывода картинок по категориям можно посмотреть?
у нас на главной выводятся темы из нескольких разделов форума (примерно то же самое по структуре)
отображение тем, в блоках по разделам
- Категория
-- Раздел
---- темы
один запрос в БД
Да вот я бьюсь как селедка об топор, но ничего путного в голосу не лезет. Сейчас добью этот вариант - потом постараюсь сделать более человеческий. дело в том, что альбом может находиться в мультикатегориях, хоть в 30 сразу, поэтому тупо добавить 1 поле в picture и указать в нем, что это фото находится в категории такой-то нельзя. Фото принадлежит альбому, стало быть - где альбом - там и все фото внутри него.

Gostemilov добавил 25.06.2013 в 20:04
UPD - а ведь как все невинно начиналось! Просто хотел к фото альбомов помимо описания приделать еще и название (не только caption но еще и title)

Last edited by Gostemilov : 06-25-2013 at 09:04 PM. Reason: Добавлено сообщение
 
 
kerk
k0t
 
kerk's Avatar
Default
0

Quote:
Originally Posted by Gostemilov View Post
добавить 1 поле в picture и указать в нем, что это фото находится в категории такой-то нельзя. Фото принадлежит альбому, стало быть - где альбом - там и все фото внутри него.
ну можно же иерархию сделать чуть по другому?
сейчас:
- Альбом
-- Фотки этого альбома
можно сделать:
- Категория
-- Альбомы категории
---- Фотки в альбомах
т.е. добавлять поле не в таблицу пикчей, а в таблицу альбомов
но при такой структуре, нельзя будет добавить один альбом в несколько категорий
 
 
Gostemilov
Специалист
Default
0

А хочется-то именно мультикатегории!!! Уж делать так делать! -

http://photo-continent.ru/album.php?u=1 - сверху список категорий альбомов под каждым альбомом список категорий, в которых он находится.

Gostemilov добавил 25.06.2013 в 20:18
Я сейчас все-таки добью это дело через SQL а потом еще и переведу это все в массивы, то есть отрабатываться будет вообще минимум запросов, при условии, что обновление последних фото будет проходит не сиюминутно а по крону, раз в час или даже того реже, чай не баре Так почему ж не отрабатывается запрос в кроне, а?



И вообще - разве это плохо?

Last edited by Gostemilov : 06-25-2013 at 09:21 PM. Reason: Добавлено сообщение
 
 
kerk
k0t
 
kerk's Avatar
Default
1

Quote:
Originally Posted by Gostemilov View Post
разве это плохо?
да наверное, нет =)
мне предлагали сделать то же самое в файловике
на локалке сделал, но с существующей иерархией категорий, это работало криво ппц
поэтому я вернул все в исходную =)
нужно полностью изменять всю структуру добавления файлов
делать привязку файла к какой то дефолтной (основной) категории и потом, по желанию узера, добавлять его в другие категории
==
модуль для портала, который у нас на главной
module Forum Threads (11.0 Кб) (пасс отправил на майл)
посмотри, как составлен запрос в БД из нескольких категорий, может переделаешь для своих нужд
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 05:18 PM.


Powered by vBulletin® Version 4.x.fuck
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.