Статьи

Создайте базовый макет газетного стиля с WordPress и jQuery

Шаблоны Grid / Newspaper / Magazine становятся все более и более доминирующими в сообществе тем оформления WordPress. Они выглядят классно, но это может быть пугающим, зная, с чего начать. В этом уроке мы используем возможности jQuery для создания макета сетки с заголовками, уменьшающими размер!

В этом руководстве предполагается, что у вас есть движок WordPress, работающий на сервере, к которому у вас есть доступ для загрузки файлов, загрузки файлов и просмотра. Если вы хотите запустить локальный сервер на вашем компьютере с установкой WordPress, здесь есть учебник для Windows и здесь для OS X.




Создайте новую папку в папке «wp-content / themes /» и назовите ее так, как вы хотите назвать скином, который мы собираемся создать. Создайте 2 новых файла в этой новой папке, один из которых называется «index.php», а другой — «style.css». Мы собираемся начать с базового кода WordPress. Этот « базовый код » — это то, с чего я начинаю каждый раз, когда создаю полный скин WordPress, потому что он включает в себя большую часть необходимой информации. Я сохранил это здесь, потому что вы можете развить это в полный скин. Я также использую таблицу стилей по умолчанию для своих тем, поэтому скопируйте этот фрагмент кода в свой файл style.css и отредактируйте содержимое соответственно. Таблица стилей связана со строкой:

1
<link rel=»stylesheet» href=»<?php bloginfo(‘stylesheet_url’); ?>» type=»text/css» media=»screen» />

Вам также понадобятся 2 файла JavaScript, один из которых является копией jQuery, а пустой файл .js называется myTheme.js. Не забудьте включить это в элемент вашей головы :

1
2
<script type=»text/javascript» src=»<?php bloginfo(‘template_directory’); ?>/jquery-1.2.6.min.js»></script>
<script type=»text/javascript» src=»<?php bloginfo(‘template_directory’); ?>/myTheme.js»></script>

Не забудьте изменить имя jQuery rel, если вы используете для меня другой пакет, которым вы, скорее всего, являетесь. myTheme.js должен находиться по ссылке jQuery, но не выше.

Примечание: jQuery 1.2.6 также поставляется с WordPress 2.2 и выше, поэтому, если вы не хотите его скачивать, вы можете найти его в wp-includes / js / jquery / jquery.js. Чтобы включить ЭТОТ документ jQuery, используйте его вместо jQuery rel выше. Вам все еще понадобится myTheme.js!

1
<script type=»text/javascript» src=»<?php bloginfo(‘url’); ?>/wp-includes/js/jquery.js»></script>

После того, как вы выбрали и активировали свою новую тему, откройте «index.php» в вашем любимом редакторе, и давайте приступим к программированию!

Вот весь код XHTML / PHP / WordPress, который нам нужен для установки содержимого и метаданных для каждого сообщения. Вставьте или введите его между тегами html open и close. Я объясню это понемногу ниже!

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<div id=»wrapper»>
    <?php if(have_posts()) : ?><?php while(have_posts()) : the_post();
 
        <div class=»post»>
 
            <div class=»left»>
                <p class=»postmetadata»>
                    <strong>Post Details</strong><br />
                    Posted: <em><?php the_time(‘l, jS F, Y’);
                    at <em><?php the_time(‘g:i a’);
                    Written by: <em><?php the_author();
                    Number of comments: <em><?php the_comments_number(‘none’, ‘1’, ‘%’);
                    Posted in: <em><?php the_category(‘, ‘);
                </p>
            </div><!— end div.left —>
 
            <div class=»right»>
                <h2><?php the_title();
                <div class=»entry»>
                    <?php the_content(‘more…’);
                </div><<!— end div.entry —>
            </div><!— end div.right —>
 
        </div><!— end div.post —>
 
    <?php endwhile;
    <?php endif;
</div><!— end div#wrapper —>
1
<div id=»wrapper»>

Div-обертка в основном оборачивает все это, поэтому мы можем выложить это позже. Все div’ы довольно понятны, и я также прокомментировал их, поэтому я пропущу их при объяснении. Короче говоря, я обернул все соответственно, так что это легко стилизовать. .left div — это левый столбец, .right div — это правый столбец, .entry div — это запись, и так далее. Я использовал классы в цикле, как если бы было более одного сообщения, идентификаторы могли бы создать резервную копию и создать ошибку проверки.

1
<?php if(have_posts()) : ?><?php while(have_posts()) : the_post();

Если вы не понимаете, что это такое, вернитесь в школу WordPress. Он в основном перебирает информацию базы данных относительно вызовов, сделанных в цикле. Если вы попросите название, цикл будет искать в базе данных название для вас.

1
2
3
4
5
6
7
<p class=»postmetadata»>
    <strong>Post Details</strong><br />
    Posted: <em><?php the_time(‘l, jS F, Y’);
    Written by: <em><?php the_author();
    Number of comments: <em><?php comments_number(‘none’, ‘1’, ‘%’);
    Posted in: <em><?php the_category(‘, ‘);
</p>

Теперь о мелочах. Все выше содержит информацию, которую мы хотим отобразить о посте. В соответствующем порядке мы просим;

  • Дата и время. Мы запрашиваем дату в формате l, jS F, Y (например, воскресенье, 8 июня 2008 г.) и время в формате g: ia (например, 16:45) . Я использовал the_time (); дважды, потому что если мы используем the_date (); чтобы запросить дату, она будет показываться только один раз в день. Если вы разместили множество сообщений в один и тот же день, дата будет отображаться не один раз для каждого сообщения, а один раз в первом сообщении дня.
  • Автор — это самоочевидно, мы просто просим автора поста.
  • Количество комментариев — это количество комментариев к сообщению. Если пост не имеет комментариев, он вернет значение «нет». Если он есть, он вернет значение «1», и да, вы уже догадались! Если он имеет более одного, он вернет значение, подобное «21» или «6», все в зависимости от того, сколько комментариев у поста.
  • Категорияthe_category (); запрашивает в базе данных категории, которым был присвоен пост. Благодаря WordPress нам не нужно беспокоиться об использовании расширенного и необработанного цикла php foreach, как (‘,’); разделяет категории запятыми для нас. Спасибо WordPress!
1
2
3
4
<h2><?php the_title();
<div class=»entry»>
    <?php the_content(‘more…’);
</div><<!— end div.entry —>

Становится ли это более понятным, чем это? Мы просим заголовок (обернутый в элемент h2, чтобы мы могли соответствующим образом его стилизовать ) и контент (обернутый в div .entry, чтобы весь контент был вложен в его собственный div для упрощения стилизации и доступа). ‘more …’ в скобках — это когда вы используете тег <! — more -> в редакторе сообщений WordPress.

1
2
<?php endwhile;
<?php endif;

Вы код код кролики должны получить это … Это снова основной цикл! Он закрывает цикл, так что только содержащиеся в нем «функции» выполняются снова и снова.

Уф! Вы выдержали весь код WordPress, который нам нужен для этого урока! Отлично сработано! Это должно выглядеть примерно так:

Примечание. Я использовал контент с моего собственного локального сервера (который происходит из моего собственного блога) в качестве наполнителя, поэтому ваш контент не будет отражать мой.

Теперь, когда у нас есть все функции xhtml и php, мы можем перейти к тому, чтобы он выглядел красиво с css! Радость!

Откройте файл style.css еще раз в своем любимом редакторе, и, если вы этого еще не сделали , вставьте в него этот код . Но вы все равно должны были это сделать, потому что иначе вы бы не смогли активировать тему!

В этом уроке я использую красоту css ‘float’ и ‘clear’, чтобы перемещать детали поста (или метаданные, как вы хотите это называть), а также контент рядом и один пост за другим. Вот базовый код макета: ( ПРИМЕЧАНИЕ. Это пока не сделает вашу страницу довольно ПРОСТО.)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
/*——LAYOUT——*/
#wrapper{
    width: 600px;
    margin: 0 auto;
}
 
.post{
    clear: both;
    width: 600px;
}
 
.post .left{
    width: 180px;
    float: left;
    padding-right: 20px;
}
 
.post .right{
    width: 400px;
    float: right;
    padding: 0 25px 20px;
}

Просто:

  • #wrapper — Эти атрибуты размещают все, что у нас есть, в середине нашей страницы и шириной 600 пикселей.
  • #post — посты могут случайно оказаться рядом с плохо плавающим предыдущим постом, или пост, в котором недостаточно контента, потому что мы используем поплавки . Атрибут ‘clear’ гарантирует, что он сдвинут до конца предыдущего элемента, несмотря ни на что.
  • Div и. Right — это плавающие влево и вправо соответственно, потому что это то, что заставляет их идти бок о бок! Если бы мы не установили ширину div, этот метод не сработал бы. Я сделал столбец сведений о публикации немного тоньше, чем столбец содержимого, потому что нам нужно больше внимания и больше места для содержимого (учитывая, что в столбце «Детали сообщения» меньше содержимого).
    Я сделал свою математику и убедился, что общая ширина составляет до 600, поэтому оба столбца хорошо вписываются в родительский div .post: 180px + 20px (отступы, поэтому у нас есть некоторый интервал) + 400px = 600px

Ура! Теперь давайте сделаем это красиво!

Итак, у нас есть скелетная компоновка, но она все равно выглядит довольно уродливо:

Это когда мы используем истинную силу наших каскадных таблиц стилей. Скопируйте или введите следующее в свой style.css под предыдущим кодом «Layout»:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*——STYLES——*/
 
body{
    font: 75%/18px Georgia, «Times New Roman», Times, serif;
    background-color: #e4e4e4;
}
 
a{
    color: #006082;
    text-decoration: none;
}
 
.post .left{
    text-align: right;
    color: #898989;
}
 
.post .left p.postmetadata strong{
    display: block;
    text-transform: uppercase;
}
 
.right{
    background-color: #fff;
    min-height: 150px;
}
 
.entry{
    color: #3c3c3c;
}
 
.entry p img{
    padding: 0 10px 7px 0;
    float: left;
}
 
a.more-link{
    display: block;
    padding-top: 10px;
    text-transform: uppercase;
}

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

  • body — здесь мы устанавливаем стандартный размер текста / шрифта и цвет фона
  • a — делает все ссылки красивыми
  • .post .left — изменить цвет текста на серый и выровнять абзацы вправо.
  • .post .left. p.postmetadata strongвыделяет «Детали публикации», делая его заглавными, и изменяет элемент strong на элемент блока, чтобы выровнять детали публикации с абзацами содержимого.
  • .right — Это немного сбивает с толку, поэтому я объясню это подробно. Очевидно, что цвет фона теперь белый, так что контент прыгает со страницы. Атрибут ‘min-height’, однако, таков, что если содержание публикации фактически короче, чем детали публикации, оно не нарушит непрерывный белый цвет на странице.
  • .entry — делает содержимое текста темно-серым.
  • .entry p imgзаставляет дышать любые изображения в области содержимого, а также позволяет тексту обтекать изображение.
  • a.more-link — класс «more-link» автоматически добавляется wordpress, чтобы выделить «more …», который мы добавили в функцию «the_content ()». Мы превращаем его в заглавную, поэтому пользователи предполагают, что это не обычная / внешняя ссылка, и дают ей немного места.

Этот CSS должен выглядеть так:

Поэтому очень важно, чтобы все хорошо выглядело без какого-либо JavaScript. Вышеприведенное компенсирует нас здесь. Но для создания нашего настоящего газетного стиля, унижающего заголовки, нам нужен вкусный jQuery! Откройте «myTheme.js» и начните ломать голову! То, чего мы хотим достичь, это что-то вроде этого (макет фотошопа):

Заметили разницу? Мы собираемся увеличить размер заголовка первого поста «героя», а также изменить цвет.

Тогда второй пост или «злодейский» пост будет слегка серым с еще меньшим размером, а последующие посты останутся одинакового размера.

Мы собираемся заняться этим, добавив классы ‘hero’ и ‘villain’ к нашим первым и вторым div .post, соответственно, к которым мы затем добавим стиль с небольшим дополнительным CSS. Мы добавляем класс в div ‘.post’, а не в элементы h2, потому что мы хотим изменить и часть содержимого, например, размер содержимого и дополнительный значок на дополнительной ссылке в сообщении ‘hero’ , Почему героя и злодея ты спрашиваешь? Потому что Злодей всегда приходит после Героя. И это легко понять.

Звучит сложно, но на самом деле это всего лишь 4 строки кода. Все это входит в myTheme.js:

1
2
3
4
$(document).ready(function(){
    $(«.post:first»).addClass(«hero»);
    $(«.post:nth-child(2)»).addClass(«villain»);
});

Большой! Ненавязчивый JavaScript! Я люблю это! Это должно быть в myTheme.js.

Мы только что использовали немного невероятно мощных, ценных и универсальных селекторов jQuery. Теперь мы незаметно добавили классы «.hero» к первому элементу «.post» на странице, а класс «.villain» — ко второму элементу «.post» на странице. Позвольте мне объяснить, как.

  • 1
    $(document).ready(function(){

    Это супер-специальная функция jQuery для инициализации функции JavaScript, которая определена после этой строки. Когда $ (document) равен .ready (), инициируйте функцию () {}, которую мы собираемся определить. Использование $ (document) .ready (function () { намного быстрее, чем использование функции default: window.onload () , потому что функция window.onload () ожидает загрузки всего документа. Это включает в себя все изображения, iframes и т. д. Нам нужно только дождаться завершения загрузки основного XHTML- документа, чтобы запустить наш скрипт — поэтому мы используем специальный $ (document) .ready (function () { jQuery для ускорения работы и меньшего отставания между начальными значениями. время просмотра и инициализация javascript. Непонятно, да? Чтобы упростить его, метод jQuery работает быстрее. Запомните это.

  • 1
    $(«.post:first»).addClass(«hero»);

    Yay для мощных селекторов! У jQuery есть удивительный набор селекторов, некоторые из которых сделаны в CSS3, но мы можем использовать их сейчас . Эта строка говорит нам получить: $ () первый элемент ‘.post’: .post: first и добавить к нему класс hero: .addClass («hero») . Теперь мы можем стилизовать это в CSS, но мы до сих пор не коснулись и не изменили XHTML-код div .post.

  • 1
    $(«.post:nth-child(2)»).addClass(«villain»);

    Больше супер сильных селекторов! jQuery не только позволяет нам выбирать: первый элемент вида, но также позволяет нам выбирать любое количество элементов! Используя : nth-child (#), мы можем выбрать любой тип элемента, который мы хотим на странице. Если бы мы хотели 30-го <p> на странице, разметка была бы $ («p: nth-child (30)») . Просто понять?

Хотя селекторы jQuery не ограничены числами! Есть еще много других селекторов, которые позволяют вам выбрать именно тот элемент, который вам нужен. Вы можете просмотреть их, посетив раздел селектора в документах jQuery .

Отлично. Со всем этим теперь мы можем сосредоточиться на визуальной стороне вещей. Не нужно больше объяснений, давайте углубимся в CSS. Добавьте или введите это в самом низу «style.css» в папке «myTheme». Чтобы «дополнительная ссылка» работала, загрузите эту стрелку из набора значков famfamfam silk и поместите ее в новую папку «images» в папке «myTheme».

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*——jQUERY——*/
 
.hero .left p.postmetadata{
margin-top: 30px;
}
 
.hero .left p.postmetadata strong{
margin-bottom: 20px;
}
 
.hero .right h2{
font-size: 46px;
font-style: italic;
font-weight: normal;
margin-bottom: 0.5em;
}
 
.hero .right p{
font-size: 14px;
}
 
.hero a.more-link{
background: url(images/arrow_right.png) no-repeat right bottom;
float: left;
padding-right: 20px;
}
 
.villain .left p.postmetadata{
margin-top: 20px;
}
 
.villain .left p.postmetadata strong{
margin-bottom: 15px;
}
 
.villain .right h2{
font-size: 32px;
font-weight: normal;
color: #747474;
}
 
.villain .right p img{
float: right;
padding: 0 0 7px 10px;
}

Вы все должны быть достаточно адекватны с CSS, так что я очень быстро пробежусь по этому новому CSS.
Это CSS, который меняет внешний вид поста .hero.

  • .hero .left p.postmetadata — мы немного опускаем его, чтобы он соответствовал нашему новому размеру заголовка.
  • .hero .left p.postmetadata strong — Мы помещаем все под выделенные жирным шрифтом «детали сообщения», чтобы они соответствовали содержательному тексту.
  • .hero .right h2 — Это отличает наш заголовок ‘hero’. Мы делаем его больше и выделяем его курсивом.
  • .hero .right p — Увеличьте размер шрифта содержания нашего героя.
  • .hero a.more-link — Добавьте маленькую зеленую стрелку из шелковой упаковки famfamfam.

А также CSS, который меняет пост .villain.

  • .villain .left p.postmetadata — делает то же самое, что и postmetadata героя, толкает его вниз.
  • .villain .left p.postmetadata strong — делает то же самое, что и выравнивание postmetadata героя.
  • .villain .right h2 — Здесь мы делаем заголовок злодея серым, не выделенным жирным шрифтом и немного большим, чем обычные столбы.
  • .villain .right p img — Образ злодея должен выделяться, верно? Мы просто перемещаем его вправо (текст оборачивается вокруг него) и соответственно меняем отступы.

Отлично сработано! В этом уроке мы рассмотрели базовый метод улучшения нашего wordpress-контента с помощью селекторов jQuery! Однако они не являются эксклюзивными для jQuery. Вы найдете все эти селекторы в CSS3 (когда все браузеры поддерживают это!). Мы просто любим jQuery, потому что они приносят их нам сейчас . Вот наш конечный продукт .