Реклама на сайте Advertise with us

Маленькая проблемка - PHP гуру выручайте!

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 08.09.07
Сообщения: 296
Рейтинг: 375

Ссылка на сообщениеДобавлено: 14/12/14 в 12:26       Ответить с цитатойцитата 

На движке имеем в админке настройку вывода релевантных роликов на странице показа видео. Вся настройка - это колличество выводимых релевантных роликов. НО! В блоке вывода рел роликов выводится и тумба ролика который сейчас смотрим. Ход мыслей разработчиков мне не совсем понятен (типа этот ролик подсвечивается через CSS как "сейчас вы смотрите") но в общем есть как есть. Все что можно в темплейтах и в CSS я выпилил. Тумба уже не подсвечивается и выводится в виде как все остальные релевантные тумбы.
Но совсем ее убрать не могу.
Как я понял , релевантность определяется по тегам из базы и плюс еще в коде определяется тумба ролика на котором стоим (что бы потом ее подсвечивать в темплейте).
Что нужно вкорячить в код , что бы запретить вывод этой тумбы? Вот собственно вся проблема..
КОД
Код: [развернуть]

Всем рейтинг за помощь парни!

Море дешевого качественного трафа для арбитража

0
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 14/12/14 в 17:00       Ответить с цитатойцитата 

Текущий видос в релейтед я так понимаю всегда есть?
Код:
       
# Find Position Of Curent Video in related_vid array
       
        $video_this = 0;
        for ($i = 0; $i < count($related_vid); $i ++)
        {
            if ($related_vid[$i] == $video_id)
            {
                $video_this = $i;
                unset($related_vid[$i]); // удаляем видос текущий, но тут образуется пустой элемент.
                $related_vid = array_values($related_vid); // сдвигаем массив, просто выбирая не пустые значения стандартной функцией.
                break;
            }
        }


ваще меняй движок, говнокодище пиздец просто. Одни запросы мускула в цикле "фор" чего стоят....

5
 



С нами с 08.09.07
Сообщения: 296
Рейтинг: 375

Ссылка на сообщениеДобавлено: 14/12/14 в 17:35       Ответить с цитатойцитата 

Ailk писал:
Текущий видос в релейтед я так понимаю всегда есть?

Да он всегда присутствует

Ailk писал:

unset($related_vid[$i]); // удаляем видос текущий, но тут образуется пустой элемент.

Короче удалился один из релейтед роликов. Ида появился пустой элемент и релейтед видео стало на один меньше. Но текущее видео осталось ((
Ailk писал:

$related_vid = array_values($related_vid); // сдвигаем массив, просто выбирая не пустые значения стандартной функцией.

Да эта строчка добавляет один релейтет ролик вместо пропавшего. В итоге приходим к тому же с чего начали ((
Ailk писал:

ваще меняй движок, говнокодище пиздец просто. Одни запросы мускула в цикле "фор" чего стоят....

Да нагрузку он не держит - вабще беда (( Я его 4 года назад ставил. Мне пришлось сервак недавно под sql отдельный взять. При первой возможности избавлюсь от этого двига , но пока приходится с ним работать , никак по другому...

Море дешевого качественного трафа для арбитража

0
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 14/12/14 в 18:09       Ответить с цитатойцитата 

Тогда в том блоке оставь как есть, а тот что ниже формирует уже готовый ряд:
Код:

        for ($i = $array_index_start; $i <= $array_index_end; $i ++)
        {
            if (isset($related_vid[$i]))
            {
                $sql = "SELECT * FROM `videos` WHERE
                       `video_active`=1 AND
                       `video_approve`=1 AND
                       `video_type`='public' AND
                       `video_id`=" . (int) $related_vid[$i];
                #echo "$i > $sql <br />";
                $result = mysql_query($sql) or mysql_die($sql);
                if (mysql_num_rows($result) == 1)
                {
                    while ($related_video = mysql_fetch_assoc($result))
                    {
                        $related_video['video_thumb_url'] = $servers[$related_video['video_thumb_server_id']];
                        if($related_video['id'] != $video_id ) // **
                              $related_videos[] = $related_video;
                    }
                }
            }
        }

каммент с **
т.е. записываем только те, котрые не равны иду. Я не знаю какое там название для айдишника используется, подставь сам суда $related_video['id'] или как там $related_video['video_id']. Но тут выходное количество видео уменьшится на 1. Нада будет или $array_index_end увеличить на 1, или $array_index_start уменьшить на 1, но не меньше нуля.

5
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 14/12/14 в 18:31       Ответить с цитатойцитата 

хатя стоп, оно все равно выбирает тока те видосы, которые есть массиве постоенном в начале, значит удалить айдишник релейт=айдишнику видео было бы достаточно.
попытка номер два удалить айдишник с первого массива smail101.gif
Код:

# Find Position Of Curent Video in related_vid array
       
        $video_this = 0;
        $tmp_vid_id[] = $video_id; // для того чтоб вычесть один массив из другого стандартной функцией.
        for ($i = 0; $i < count($related_vid); $i ++)
        {
            if ($related_vid[$i] == $video_id)
            {
                $video_this = $i;
                $related_vid = array_diff($related_vid,$tmp_vid_id); // альтернативный вариант удаления вычитанием массивов
                break;
            }
        }

5
 



С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538


Передовик Master-X (01.11.2009) Передовик Master-X (16.11.2009) Передовик Master-X (01.02.2011) Передовик Master-X (01.12.2011) Передовик Master-X (16.12.2011) Ветеран трепа Master-X (01.01.2014)
Ссылка на сообщениеДобавлено: 14/12/14 в 18:35       Ответить с цитатойцитата 

Wicher писал:
        # Find Position Of Curent Video in related_vid array
       
        $video_this = 0;
        for ($i = 0; $i < count($related_vid); $i ++)
        {
            if ($related_vid[$i] == $video_id)
            {
                $video_this = $i;
                break;
            }
        }

Чудный код. smail101.gif

Попробуй заменить на это
Код:
# Find Position Of Curent Video in related_vid array
$video_this = 0;
// $video_this = array_search($video_id, $related_vid);

5
 



С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365

Ссылка на сообщениеДобавлено: 14/12/14 в 18:48       Ответить с цитатойцитата 

Искать текущее видео вообще нету смысла. Поэтому этот поиск как и вычисление $array_index_start / $array_index_end
можно заменить на
Код:
$array_index_start = 0;
$array_index_end = min($config['rel_video_per_page'], count($related_vid));

Ну и в последнем блоке после
Код:
for ($i = $array_index_start; $i <= $array_index_end; $i ++)
        {

добавить
Код:
if ($related_vid[$i] == $video_id) continue;

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

P.S. Ну и таки да, код эффективностью не блещет. Хотя полагаю там не только рилейтеды написаны в таком стиле, так что смысла оптимизировать что-то здесь немного.

5
 



С нами с 08.09.07
Сообщения: 296
Рейтинг: 375

Ссылка на сообщениеДобавлено: 14/12/14 в 19:06       Ответить с цитатойцитата 

Ailk: Yacc:
Все варианты дают тот же результат - выпиливается одно видео из блока , но то которое проигрывается мать его остается на месте ((

Mika:
При таком раскладе генерируется блок где ролики совсем не релевантны проигрываемуму. Ну и проигрываемый на месте тоже остается , в чем вся и проблема...

Короче вот еще что. В смарти темплейте блок выводится так:

{section name=i loop=$view.related_videos}
тра ля ля css , титл урл тумба
{/section}

Короче я сделал так: {section name=i}
В итоге получил вывод всего одного релевантного ролика , но он сука отличный от проигрываемого!!
Может на мысль наведет...

Море дешевого качественного трафа для арбитража

0
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 14/12/14 в 19:15       Ответить с цитатойцитата 

так может у тебя кеш смарти показывается? smail101.gif

5
 



С нами с 08.09.07
Сообщения: 296
Рейтинг: 375

Ссылка на сообщениеДобавлено: 14/12/14 в 19:21       Ответить с цитатойцитата 

Ailk:
Не я папку с кэшем чищу постоянно и браузер в режиме приватности запускаю постоянно.
Я еще вот че нашел в этом долбаном скрипте.
Короче этот кусок кода что я приводил был из файла class.video.php
А еще есть файл view_video.php
И там на тему есть кусок кода:
Код: [развернуть]

Емае может здесь что подправить? icon_mad.gif

Море дешевого качественного трафа для арбитража

0
 



С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365

Ссылка на сообщениеДобавлено: 14/12/14 в 19:31       Ответить с цитатойцитата 

Wicher писал:
При таком раскладе генерируется блок где ролики совсем не релевантны проигрываемуму.

Ага, признаю, через чур упросил icon_smile.gif

Wicher писал:
Ну и проигрываемый на месте тоже остается , в чем вся и проблема...

А вот это странно. Ибо что Ailk выше приводил код, что я, видео с айдишником текущего, не попадает в $related_videos.

Wicher писал:

А еще есть файл view_video.php
И там на тему есть кусок кода:

А этот кусок уже все объясняет, ибо удаляй не удаляй текущее видео в get_related_videos, а его снова в середину вхерачивают icon_smile.gif

5
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 14/12/14 в 19:31       Ответить с цитатойцитата 

не, в исходном массиве, полученном из тагов нада удалить айдишник текущего видео и все. Может он там несколько раз повторяется ? Хотя по идее должно удалится еще и тогда, когда в окончательно варианте формируется выходной массив. вариант мики или мой с ифом **

упд. Мемкеш почисти, мож него показывается )) там вроде есть какой-то cache::save

5
 



С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365

Ссылка на сообщениеДобавлено: 14/12/14 в 19:46       Ответить с цитатойцитата 

Ailk писал:
не, в исходном массиве, полученном из тагов нада удалить айдишник текущего видео и все.

Не все, посмотри на второй код, там есть такое:
Код:
        if ($video_this === '')
        {
            $num_related_videos = count($related_videos);
            if ($num_related_videos > 4)
            {
                $video_this = (int) $num_related_videos/2;
                $related_videos[$video_this] = $video_info;
            }
            else if ($num_related_videos > 2)
            {
                $video_this = 0;
            }
        }


Поэтому имхо самым простым решением будет оставить функцию get_related_videos как есть, а в файле view_video.php
вместо
Код:
        $view['related_videos'] = $related_videos;
        $video_next = $video_this + 1;
        $video_prev = $video_this - 1;

написать
Код:
        unset($related_videos[$video_this]);
        $related_videos = array_values($related_videos);
        $view['related_videos'] = $related_videos;
        $video_next = $video_this;
        $video_prev = $video_this-1;

Это при условии конечно, что больше нигде $view['related_videos'] меняться не будет, и $video_this нигде после не используется в качестве айдишника текущего видео.

5
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 14/12/14 в 19:55       Ответить с цитатойцитата 

да, но этот $related_videos в начале кода задается как раз функцией, и нигде больше не перезадается.
Код:
    $related_videos = Video::get_related_videos($video_id);

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

5
 



С нами с 08.09.07
Сообщения: 296
Рейтинг: 375

Ссылка на сообщениеДобавлено: 14/12/14 в 19:56       Ответить с цитатойцитата 

Короче парни не ломайте мозги. Заработало. Щас секунду напишу как!

Море дешевого качественного трафа для арбитража

0
 



С нами с 08.09.07
Сообщения: 296
Рейтинг: 375

Ссылка на сообщениеДобавлено: 14/12/14 в 20:05       Ответить с цитатойцитата 

Файл
class.video.php
Делаем как предложил Ailk:
Тоесть добавляем две строчки
unset($related_vid[$i]); // удаляем видос текущий, но тут образуется пустой элемент.
$related_vid = array_values($related_vid); // сдвигаем массив, просто выбирая не пустые значения стандартной функцией.
Далее в файле view_video.php
Полностью удаляем вот это место
$video_this = '';

for ($i = 0; $i < count($related_videos); $i ++)
{
if ($related_videos[$i]['video_id'] == $video_id)
{
$video_this = $i;
break;
}
}
Все нах! Нужное колличество роликов выводится без текущего!
Спасибо огромное! Ваша помощь огромна. Всем рейтинг.

Море дешевого качественного трафа для арбитража

0
 



С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365

Ссылка на сообщениеДобавлено: 14/12/14 в 20:06       Ответить с цитатойцитата 

Ailk писал:
да, но этот $related_videos в начале кода задается как раз функцией, и нигде больше не перезадается.

А это что?
Код:
                $video_this = (int) $num_related_videos/2;
                $related_videos[$video_this] = $video_info;

$video_info - это, если я верно понимаю, инфа от текущего видео. В результате, каким бы ни был $related_videos, если он не содержит текущее видео, то оно будет принудительно воткнуто на место среднего элемента.

5
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 14/12/14 в 20:09       Ответить с цитатойцитата 

блиа, я даже внимания не обратил из-за названия переменной smail101.gif

5
 



С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365

Ссылка на сообщениеДобавлено: 14/12/14 в 20:12       Ответить с цитатойцитата 

Wicher писал:
Полностью удаляем вот это место
...
Все нах! Нужное колличество роликов выводится без текущего!

А ты про $video_next и $video_prev не забыл?
Хотя если в ссылках они не используются, то конечно пофиг.

5
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 14/12/14 в 20:15       Ответить с цитатойцитата 

Wicher писал:
Файл
class.video.php
Делаем как предложил Ailk:
Тоесть добавляем две строчки
unset($related_vid[$i]); // удаляем видос текущий, но тут образуется пустой элемент.
$related_vid = array_values($related_vid); // сдвигаем массив, просто выбирая не пустые значения стандартной функцией.
Далее в файле view_video.php
Полностью удаляем вот это место
$video_this = '';

for ($i = 0; $i < count($related_videos); $i ++)
{
if ($related_videos[$i]['video_id'] == $video_id)
{
$video_this = $i;
break;
}
}
Все нах! Нужное колличество роликов выводится без текущего!
Спасибо огромное! Ваша помощь огромна. Всем рейтинг.
это не выход ) все равно может попастца. Потому что по логике скрипта выбираются слева и справа от текущего видоса из массива релятивные, а если ты удалил, то с 1 по нужную выберется, и в ней может содержатся видео котрое смотришь.

5
 



С нами с 08.09.07
Сообщения: 296
Рейтинг: 375

Ссылка на сообщениеДобавлено: 14/12/14 в 20:21       Ответить с цитатойцитата 

Mika писал:
А ты про $video_next и $video_prev не забыл?
Хотя если в ссылках они не используются, то конечно пофиг.

Я короче просто взял начиисто файлы еще до редактирования , поправил class.video.php как в самом начале Ailk: советовал и удалил в файле view_video.php кусок кода. Все идеально просто все на месте все ссылки, все!
Кстатии я попробовал только view_video.php править - хрен. Работает только с исправленным class.video.php Ну и на оборот естественно тоже не работает..

Море дешевого качественного трафа для арбитража

0
 



С нами с 08.09.07
Сообщения: 296
Рейтинг: 375

Ссылка на сообщениеДобавлено: 14/12/14 в 20:23       Ответить с цитатойцитата 

Ailk писал:
это не выход ) все равно может попастца. Потому что по логике скрипта выбираются слева и справа от текущего видоса из массива релятивные, а если ты удалил, то с 1 по нужную выберется, и в ней может содержатся видео котрое смотришь.

Ну блин уже что то...
Мне конечно 4k роликов не прощелкать , но потыкал щас - ниразу не попалось...

Море дешевого качественного трафа для арбитража

0
 



С нами с 17.08.11
Сообщения: 61
Рейтинг: 62

Ссылка на сообщениеДобавлено: 14/12/14 в 21:31       Ответить с цитатойцитата 

Вместо
Код:
for ($i = 0; $i < count($related_videos); $i ++)

сделайте foreach. Или хотя бы так:
Код:
for ($i = 0, $count = count($related_videos); $i < $count; $i ++)

А массив рилейтед формируйте в новой переменной.
И да, вот это:
Код:
for ($related_vid... {
unset($related_vid[$i]);
$related_vid = array_values($related_vid);
...}

кто делает unset элемента внутри цикла обхода элементов массива и к тому же переназначает его? Это говнокод похлеще того, что у ТС.

0
 



С нами с 08.09.07
Сообщения: 296
Рейтинг: 375

Ссылка на сообщениеДобавлено: 14/12/14 в 21:52       Ответить с цитатойцитата 

ravlio писал:
Вместо
Код:
for ($i = 0; $i < count($related_videos); $i ++)

сделайте foreach. Или хотя бы так:
Код:
for ($i = 0, $count = count($related_videos); $i < $count; $i ++)


Если так то ненужная тумба открытого ролика появляется буквально в каждом третем ролике..
ravlio писал:

А массив рилейтед формируйте в новой переменной.

Буду признателен если подскажете как.
ravlio писал:

И да, вот это:
Код:
for ($related_vid... {
unset($related_vid[$i]);
$related_vid = array_values($related_vid);
...}

кто делает unset элемента внутри цикла обхода элементов массива и к тому же переназначает его? Это говнокод похлеще того, что у ТС.

Ну это же не скажется на скорости работы скрипта?..

Море дешевого качественного трафа для арбитража

0
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 14/12/14 в 22:00       Ответить с цитатойцитата 

ravlio писал:
Вместо
Код:
for ($i = 0; $i < count($related_videos); $i ++)

сделайте foreach. Или хотя бы так:
Код:
for ($i = 0, $count = count($related_videos); $i < $count; $i ++)

А массив рилейтед формируйте в новой переменной.
И да, вот это:
Код:
for ($related_vid... {
unset($related_vid[$i]);
$related_vid = array_values($related_vid);
...}

кто делает unset элемента внутри цикла обхода элементов массива и к тому же переназначает его? Это говнокод похлеще того, что у ТС.
ой да ладно нудить, ниче что это последняя итерация и выход из цикла?

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »