2013-01-11 2 views
1

У меня есть страница с списком видео Youtube. Я использую массив, как показано ниже, а затем на странице я использую некоторые другие функции, чтобы отображать заголовок и захват экрана видео вниз по странице. Таким образом, я просто добавить новый Vidoe в список ниже, и она захватывает все правильно информацию от YouTube:Остановить разбиение страниц на страницы для определенных результатов

//exampleX is a youtube video code 
$videolist = array(
"example1", 
"example2", 
"example3", 
"example4", 
"example5" 
); 

Со временем этот список вырос до того момента, когда мне нужно, чтобы добавить некоторую автоматическую нумерацию страниц для видео, поскольку список продолжает расти. Я сделал это раньше, поэтому думаю, что смогу справиться с этой частью.

Однако у клиента есть несколько видеороликов, которые должны оставаться вместе на одной странице независимо от того, что. Я не уверен, как справиться с этой частью.

Любые мысли об этом будут оценены.

Спасибо, Крис

+1

Посмотрите в «бен упаковке» алгоритмов. Видео, которые должны быть на одной странице, нужно просто «упаковать в один ящик».Размер бункера будет количеством видео на страницу. –

+0

Возможно, пришло время подумать об объекте для ваших «видео». Может хранить дополнительные атрибуты. Как и любой атрибут, который предполагает, что они «должны оставаться вместе». – ficuscr

ответ

2

В качестве простого расширения того, что у вас уже есть без необходимости слишком много изменений, рассмотреть вопрос о внесении ваш массив видео многомерным, с помощью ключа, который указывает, что должны быть вместе. При разбиении на страницы, если вы столкнулись с тем, у кого есть keeptogether => TRUE в конце списка вашей страницы, вместо того, чтобы прерывать, продолжайте цикл, пока не достигнете следующего keeptogether => FALSE. (Я также хотел бы создать возможность пропустить ключ keeptogether как эквивалент значению FALSE).

$videolist = array(
    array("title" => "example1", "keeptogether" => FALSE), 
    array("title" => "example2", "keeptogether" => FALSE), 
    array("title" => "example3", "keeptogether" => TRUE), 
    array("title" => "example4", "keeptogether" => TRUE), 
    array("title" => "example5" "keeptogether" => FALSE) 
); 

Если вам это нужно, чтобы работать более элегантно, когда keeptogether => TRUE происходит в конце страницы, и вместо этого следует разбить на следующую страницу, прежде чем продолжить (так текущая страница не слишком долго), рассмотрим простой алгоритм, например:

# Pseudocode: 
# Encountering a keeptogether == TRUE when 2 from the end of a normal page length: 
if current_page_counter < (num_per_page - 2) and keeptogether == TRUE 
    break_to_next_page 
else 
    loop_until keeptogether == FALSE 
+0

Хорошая идея! Мне нравится этот метод, потому что, как вы сказали, он не слишком сильно меняет мой существующий процесс. Я буду работать над этим методом. Благодаря! –

+0

Это отлично поработало и сделало именно то, что мне нужно ... спасибо! –

+0

@ChrisCummings Happy to help –

1

Возможно, в вашем списке вы можете отсортировать группы по группам и группам по группам. У большинства групп будет только одно видео, но те, у кого есть видео вместе, будут иметь несколько видеороликов. Как так:

$videolist = array(
    "group1" => array("example1") 
    "group2" => array("example2", "example3"), 
    "group3" => array("example4"), 
    "group4" => array("example5"), 
); 

Так вместо постраничного на видео, вы постраничной группой и, как правило, группа имеет одно видео, но он может иметь более чем один.

Если вы используете базу данных для их хранения, вы можете реплицировать эту структуру там.

0

Рассматривали ли вы использование многомерного массива для хранения видео? Каждый элемент массива $videolist будет содержать массив видео. Большинство из них будет иметь только один элемент, а те, которые должны быть сгруппированы вместе будут находиться в одном массиве, например, так:

$videolist = array(
    array("example1"), 
    array("example2"), 
    array("example3", "example4"), 
    array("example5") 
); 

Затем при отображении видео, вы можете сделать что-то вроде этого:

$Offset = 1; 
$PerPage = 2; 
$Count = 0; $Displayed = 0; 
foreach ($videolist as $videoarray) { 
    foreach ($videoarray as $video) { 
     $Count++; 
     if ($Count <= $Offset) continue; 

     $Displayed++; 
     // Display Video 
    } 

    if ($Displayed >= $PerPage) break; 
} 

Таким образом, страница не заканчивается до конца текущей группы.

Вы также можете изменить его, так что вы делаете count() из $videoarray прежде, чем итерация над ним и сломаться, если она будет настаивать в общей сложности более $PerPage

Смежные вопросы