|
|
|
| Здравствуйте!
помогите пожалуйста разобраться с задачей: нужно вывести массив постранично...
вид массива:
Array
(
[2715] => stdClass Object
(
[ID] => 2715
[post_author] => 1
[post_date] => 2011-10-07 15:35:02
[post_date_gmt] => 2011-10-07 10:35:02
[post_content] =>
[post_title] => myimages
[post_excerpt] =>
[post_status] => inherit
[comment_status] => open
[ping_status] => closed
[post_password] =>
[post_name] => myimages
[to_ping] =>
[pinged] =>
[post_modified] => 2011-10-07 15:35:02
[post_modified_gmt] => 2011-10-07 10:35:02
[post_content_filtered] =>
[post_parent] => 2714
[guid] => http://www.url.ru/wp-content/uploads/2011/10/myimages.jpg
[menu_order] => 0
[post_type] => attachment
[post_mime_type] => image/jpeg
[comment_count] => 0
[filter] => raw
)
// и так далее в таком же духе
)
|
есть данные:
<?php
// $attachment это сам массив
$imgcount = count($attachment); // количество
// вывожу данные из массива через foreach
?>
|
спасибо! | |
|
|
|
|
|
|
|
для: tima2010
(07.10.2011 в 15:19)
| | Возможно вас заинтересует скрипт по ссылке http://softtime.ru/scripts/pager.php. | |
|
|
|
|
|
|
|
для: cheops
(07.10.2011 в 15:27)
| | спасибо за ответ, получается мы просто заменяем файл на мой массив, что то типа:
<?php
$filename = $attachmen; // мой массив $attachmen
// Число позиций на странице
$pnumber = 3;
/*
это нам не нужно
// Открываем файл для чтения
$bufer = file_get_contents($filename);
// Находим все строки при помощи регулярного выражения
preg_match_all("#([\d]+) ([^\n]+)(\n|$)#U",
$bufer,
$out,
PREG_PATTERN_ORDER);
*/
/* В этом месте я немного запутался, тоже получается не нужно? или нужно сейчас что то сделать с массивом? */
// Формируем промежуточный массив
for($i = 0; $i < count($out[1]); $i++)
{
$temp[] = trim($out[2][$i]);
}
// Проверяем передан ли номер текущей страницы
if(isset($_GET['page'])) $page = $_GET['page'];
else $page = 1;
// Число страниц
$total = count($temp);
$number = (int)($total/$pnumber);
if((float)($total/$pnumber) - $number != 0) $number++;
$start = (($page - 1)*$pnumber + 1);
$end = $page*$pnumber + 1;
if($end > $total) $end = $total;
// Выводим содержимое страниц
for($i = $start; $i < $end; $i++)
{
echo $temp[$i]."<br>";
}
// Постраничная навигация
for($i = 1; $i <= $number; $i++)
{
// Если это произвольная страница
if($i != $number)
{
if($page == $i)
{
echo "[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."] ";
}
else
{
echo "<a href='$_SERVER[PHP_SELF]?page=$i'>[".
(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</a> ";
}
}
// Если это последняя страница заменяем последнюю цифру
// максимальным числом позиций в массиве $temp
else
{
if($page == $i)
{
echo "[".(($i - 1)*$pnumber + 1)."-".($total - 1)."] ";
}
else
{
echo "<a href='$_SERVER[PHP_SELF]?page=$i'>[".
(($i - 1)*$pnumber + 1)."-".($total - 1)."]</a> ";
}
}
}
?>
|
| |
|
|
|
|
|
|
|
для: tima2010
(07.10.2011 в 15:34)
| | Совершенно верно. | |
|
|
|
|
|
|
|
для: cheops
(07.10.2011 в 15:39)
| | Спасибо получилось, еще помогло array_slice | |
|
|
|
|
|
|
|
для: cheops
(07.10.2011 в 15:39)
| | Подскажите пожалуйста, не могу сообразить как посчитать
Разбиваю массив через array_slice
как посчитать с какой строки показывать? на данный момент делаю таким кодом, но хочется чтобы было автоматически
вывожу по 12 записей:
<?
$pnumber = 12;
if ($page == 1) { $arrayslice = 0; }
elseif ($page == 2) { $arrayslice = 12; }
elseif ($page == 3) { $arrayslice = 24; }
elseif ($page == 4) { $arrayslice = 36; }
elseif ($page == 5) { $arrayslice = 48; }
elseif ($page == 6) { $arrayslice = 60; }
elseif ($page == 7) { $arrayslice = 72; }
elseif ($page == 8) { $arrayslice = 84; }
elseif ($page == 9) { $arrayslice = 96; }
elseif ($page == 10) { $arrayslice = 108; }
$arraysliceend= $arrayslice + $pnumber;
// foreach (array_slice($filename,$arrayslice,$arraysliceend) as $file) :
// ....
?>
|
| |
|
|
|
|
|
|
|
для: tima2010
(07.10.2011 в 17:01)
| | $arrayslice = $pnumber*($page-1); | |
|
|
|
|
|
|
|
для: Lotanaen
(07.10.2011 в 17:25)
| | Спасибо, у вас 3D мозг )) | |
|
|
|
|
|
|
|
для: Lotanaen
(07.10.2011 в 17:25)
| | Вы не знаете почему данные в массиве при такой постраничной навигации с разбивкой через array_slice начинают скакать? бывает на 2 странице повторяются данные что и на первой и так далее... | |
|
|
|
|
|
|
|
для: tima2010
(08.10.2011 в 16:00)
| | что то array_slice глючит, если выводим с 0 по 12 то все ок
но если с 12-24 то выводит 24 записи в не промежуток между 12 и 24
$foreacharray = array_slice($filename,$arrayslice,$arraysliceend);
|
разве нельзя выбирать с середины?
видимо придется разбивать массив с помощью array_chunk | |
|
|
|
|
|
|
|
для: tima2010
(08.10.2011 в 16:44)
| | В итоге сделал так:
<?php
if ($page == '')
{
$arraychunkvalue = 0;
}
else {
$arraychunkvalue = $page - 1; // так как ключ массива с 0
}
$filename = array_chunk($filename, $pnumber);
foreach ($filename[$arraychunkvalue] as $file) :
// ....
?>
|
| |
|
|
|