PHP заново создать WordPress the_loop - PullRequest
0 голосов
/ 18 августа 2011

В настоящее время я работаю над базовой, но сделанной на заказ CMS, которую мы будем использовать на нескольких наших сайтах. До того, как кто-то меня разжигает, я хорошо знаком с другими альтернативами, однако ничто из того, что мы пробовали, не является достаточно гибким для наших данных.

С этого я начну.

Одной из функций, которые мне нравятся в Wordpress, является The Loop.

while(have_posts()) : the_content();
    the_content();
endwhile;

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

Посмотрев на код, я понял, что has_posts(), похоже, возвращает логическое значение, если в массиве еще есть сообщения.

the_article говорит, что мы все еще находимся в цикле, поэтому установите переменную для статей (записей) с необходимыми нам данными.

У меня вроде как получилось, но мне кажется, что я могу получить только один фрагмент информации из массива:

while (have_articles()): the_article();
    echo "<h1 class='title'>" . the_title() . "</h1>";
endwhile;

Где the_title:

function the_title() {
    global $AC;

    return $AC->p_title;
}

Спасибо за помощь!

Ответы [ 3 ]

4 голосов
/ 18 августа 2011

Вероятно, нет ничего настолько безоговорочного для заимствования концепций и реализаций, чем от WordPress.

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

Реализуйте свой собственный "цикл" в режиме ООП. Никогда не пытайтесь понять и скопировать код WordPress. Это плохо.

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

$iterator = new PostIterator($category, $page);
while ($iterator->hasNext()) {
   $post = $iterator->next();
   echo $post->title . ' ' . $post->getFormattedDate() . '<br />';
}
1 голос
/ 18 августа 2011

Забавно, я вижу цикл как худшую часть Wordpress.Слишком много магии ни за что.

В любом случае, чтобы реализовать цикл, это что-то вроде:

function the_title() {
    global $articles;
    static $position;

    return $articles[$position++]->title;
}

Видите, каждый раз, когда вы вызываете the_title() и т.п., вы должны увеличиватьуказатель.Возможно, вам придется также сделать $position глобальным, если вы хотите использовать его в других функциях, таких как the_post().

0 голосов
/ 18 августа 2011

Я изменил current_article на public, а не static, что помогло.Также оказалось, что моя функция the_title обращалась к неправильному имени поля.

Эта проблема решена.

@ Все, кто ответил;Ваше мнение ценится, и я согласен, что цикл связан со своими проблемами и прочим, но он также обеспечивает простой (когда вы контролируете) способ доведения контента до желаемого уровня. См. Темы Wordpress.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...