我唯一能做的就是将foreach限制为8,但实际上,我想要的是让它分页。
代码确实在"帖子中显示了一些帖子"文件夹,但正如我所说,我想要的是分页。
<?php
$ruta = "posts"; // Indicar ruta
$directorio = opendir($ruta);
$get = new DOMDocument('1.0', 'utf-8');
libxml_use_internal_errors(true);
while ($archivo = readdir($directorio)) {
if($archivo != '.' && $archivo != '..' && $archivo != '.htaccess' && substr($archivo, -4) == '.php') {
$entradas[$archivo] = filemtime($ruta."/".$archivo);
} //Fin de la Condicion if
} //Fin del While
arsort ($entradas);
closedir($directorio);
function limit($iterable, $limit) {
foreach ($iterable as $key => $value) {
if (!$limit--) break;
yield $key => $value;
}
}
// $array_slice_feed = array_slice($entradas, (count($entradas) - 5));
foreach (limit($entradas, 8) as $archivo => $timestamp) {
//Extraemos el Contenido de los Post para despues Mostrarlo
$post = $archivo;
$get->loadHTML(mb_convert_encoding(file_get_contents("posts/$post"), 'HTML-ENTITIES', 'UTF-8'));
$contenedor = $get->getElementById('post');
$img = $contenedor->getElementsByTagName('img');
$imagen = $img->item(0)->getAttribute('src');
$get->loadHTML(mb_convert_encoding(file_get_contents("posts/$post"), 'HTML-ENTITIES', 'UTF-8'));
$contenedor = $get->getElementById('post');
$title = $contenedor->getElementsByTagName('div');
$titulo = $title->item(0)->nodeValue;
$get->loadHTML(mb_convert_encoding(file_get_contents("posts/$post"), 'HTML-ENTITIES', 'UTF-8'));
$contenedor = $get->getElementById('post');
$des = $contenedor->getElementsByTagName('div');
$descripcion = $des->item(1)->nodeValue;
$get->loadHTML(mb_convert_encoding(file_get_contents("posts/$post"), 'HTML-ENTITIES', 'UTF-8'));
$contenedor = $get->getElementById('post');
$author = $contenedor->getElementsByTagName('div');
$autor = $author->item(2)->nodeValue;
$get->loadHTML(mb_convert_encoding(file_get_contents("posts/$post"), 'HTML-ENTITIES', 'UTF-8'));
$contenedor = $get->getElementById('post');
$fecha1 = $contenedor->getElementsByTagName('div');
$fecha2 = $fecha1->item(3)->nodeValue;
$get->loadHTML(mb_convert_encoding(file_get_contents("posts/$post"), 'HTML-ENTITIES', 'UTF-8'));
$contenedor = $get->getElementById('post');
$DataDia = $contenedor->getElementsByTagName('div');
$Data_Dia = $DataDia->item(3)->getAttribute("data-day");
$get->loadHTML(mb_convert_encoding(file_get_contents("posts/$post"), 'HTML-ENTITIES', 'UTF-8'));
$contenedor = $get->getElementById('post');
$DataMes = $contenedor->getElementsByTagName('div');
$Data_Month = $DataMes->item(3)->getAttribute("data-mes");
$get->loadHTML(mb_convert_encoding(file_get_contents("posts/$post"), 'HTML-ENTITIES', 'UTF-8'));
$contenedor = $get->getElementById('post');
$hora1 = $contenedor->getElementsByTagName('div');
$hora2 = $hora1->item(4)->nodeValue;
$get->loadHTML(mb_convert_encoding(file_get_contents("posts/$post"), 'HTML-ENTITIES', 'UTF-8'));
$contenedor = $get->getElementById('post');
$desW = $contenedor->getElementsByTagName('div');
$descripcionWeb = $desW->item(5)->nodeValue;
$desde = 0;
$hasta = 56;
if (isset($_GET['cat'])) {
$cadena_buscada = $_GET['cat'];
} elseif (isset($_GET['buscar'])) {
$cadena_buscada = $_GET['buscar'];
}else{
$cadena_buscada = NULL;
}
if (preg_match("/$cadena_buscada/i", "$descripcion")) {
echo "
<article>
<div class='thumb'>
<img src='$imagen' />
</div>
<a href='$ruta/$archivo'>
$titulo
<span><i class='icon-folder2'></i> $descripcion</span>
</a>
</article>
";
} else if (preg_match("/$cadena_buscada/i", "$titulo")) {
echo "
<article>
<div class='thumb'>
<img src='$imagen' />
</div>
<a href='$ruta/$archivo'>
$titulo
<span><i class='icon-folder2'></i> $titulo</span>
</a>
</article>
";
}
}
?>
答案 0 :(得分:1)
我无法测试没有数据,如果你想要分页,你必须指定起点,而不仅仅是每页限制。另外我不知道你为什么使用yield,如果你只使用array_slice作为那个逻辑,它可能会更具可读性,我也删除了部分重复代码......
<?php
$ruta = "posts"; // Indicar ruta
$directorio = opendir($ruta);
$get = new DOMDocument('1.0', 'utf-8');
libxml_use_internal_errors(true);
while ($archivo = readdir($directorio)) {
if($archivo != '.' && $archivo != '..' && $archivo != '.htaccess' && substr($archivo, -4) == '.php') {
$entradas[$archivo] = filemtime($ruta."/".$archivo);
} //Fin de la Condicion if
} //Fin del While
arsort ($entradas);
closedir($directorio);
function limit($iterable, $from, $per_page = 8)
{
$i = 0;
$page = 0;
foreach ($iterable as $key => $value) {
++$page;
if ($from <= $page && $i < $per_page) {
++$i;
yield $key => $value;
}
}
}
# pagination start
$per_page = 8;
$num_of_pages = count($entradas);
$from = (int)(isset($_GET['from']) ? $_GET['from'] : 0);
unset($_GET['from']);
$query_string = http_build_query($_GET);
for ($i = 0; $i <= floor(($num_of_pages-1) / $per_page); $i++) {
echo " <a href='?from=$i&$query_string'> " . ($i + 1) . " </a> | ";
}
echo "<br>";
# pagination end
foreach (limit($entradas, $from * $per_page, $per_page) as $archivo => $timestamp) {
//Extraemos el Contenido de los Post para despues Mostrarlo
$post = $archivo;
$get->loadHTML(mb_convert_encoding(file_get_contents("posts/$post"), 'HTML-ENTITIES', 'UTF-8'));
$contenedor = $get->getElementById('post');
$img = $contenedor->getElementsByTagName('img');
$imagen = $img->item(0)->getAttribute('src');
$title = $contenedor->getElementsByTagName('div');
$titulo = $title->item(0)->nodeValue;
$descripcion = $title->item(1)->nodeValue;
$autor = $title->item(2)->nodeValue;
$fecha2 = $title->item(3)->nodeValue;
$Data_Dia = $title->item(3)->getAttribute("data-day");
$Data_Month = $title->item(3)->getAttribute("data-mes");
$hora2 = $title->item(4)->nodeValue;
$descripcionWeb = $title->item(5)->nodeValue;
$desde = 0;
$hasta = 56;
if (isset($_GET['cat'])) {
$cadena_buscada = $_GET['cat'];
} elseif (isset($_GET['buscar'])) {
$cadena_buscada = $_GET['buscar'];
} else {
$cadena_buscada = null;
}
if (preg_match("/$cadena_buscada/i", "$descripcion")) {
echo "
<article>
<div class='thumb'>
<img src='$imagen' />
</div>
<a href='$ruta/$archivo'>
$titulo
<span><i class='icon-folder2'></i> $descripcion</span>
</a>
</article>
";
} else if (preg_match("/$cadena_buscada/i", "$titulo")) {
echo "
<article>
<div class='thumb'>
<img src='$imagen' />
</div>
<a href='$ruta/$archivo'>
$titulo
<span><i class='icon-folder2'></i> $titulo</span>
</a>
</article>
";
}
}