четверг, 17 декабря 2009 г.

И снова про людей...

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

вторник, 15 декабря 2009 г.

Зима началась

Ой, по-моему, снег пошел. :)

пятница, 4 декабря 2009 г.

10 полезных приемов и техник программирования Wordpress - #10 Изменяем размер изображений, используя TimbThumb и шорткоды Wordpress

Изменяем размер изображений, используя TimbThumb и шорткоды Wordpress

Проблема.

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

Но изображения, как правило, имеют различные размеры. Как на счет того, чтобы использовать TimbThumb и шорткоды для того, чтобы автоматически изменять их размеры?

Решение.

Первое, что необходимо сделать, - это создать shortcode. Вставьте следующий код в файл functions.php:

function imageresizer( $atts, $content = null ) {
return '<img src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2009/10//timthumb/timthumb.php?src='.$content.'&w=590" alt="" />';
}

add_shortcode('img', 'imageresizer');

Теперь вы можете вставить следующий код в свой пост и ваши изображения автоматически изменят размер:

[img]http://www.yoursite.com/yourimage.jpg[/img]

Объяснение кода.

Этот код просто создает shortcode ([img]), который принимает один единственный параметр: путь к изображению. Однако, этот метод – не самое лучшее решение для изменения размеров больших изображений.

TimbThumb делает ширину изображения равной 590 пикселям (величину этого параметра можно изменить в строке номер 2 – w=590). Также, вы можете добавить в качестве параметра величину высоты изображения (например, h=60).

четверг, 3 декабря 2009 г.

10 полезных приемов и техник программирования Wordpress - #9 Создаем выпадающее меню для упрощения навигации по тэгам

Создаем выпадающее меню для упрощения навигации по тэгам

Проблема.

Тэги – это круто, так как они позволяют упорядочить контент, используя набор определенных терминов. Но с отображением облака тэгов есть некоторые проблемы: оно выглядит не очень, так еще и разрастись может, как не знаю что…

Каково же решение? Нужно просто создать выпадающее меню для тэгов - то гораздо упрощает навигацию по ним.

Решение.

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

<?php
function dropdown_tag_cloud( $args = '' ) {
$defaults = array(
'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC',
'exclude' => '', 'include' => ''
);
$args = wp_parse_args( $args, $defaults );

$tags = get_tags( array_merge($args, array('orderby' => 'count', 'order' => 'DESC')) ); // Always query top tags

if ( empty($tags) )
return;

$return = dropdown_generate_tag_cloud( $tags, $args ); // Here's where those top tags get sorted according to $args
if ( is_wp_error( $return ) )
return false;
else
echo apply_filters( 'dropdown_tag_cloud', $return, $args );
}

function dropdown_generate_tag_cloud( $tags, $args = '' ) {
global $wp_rewrite;
$defaults = array(
'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC'
);
$args = wp_parse_args( $args, $defaults );
extract($args);

if ( !$tags )
return;
$counts = $tag_links = array();
foreach ( (array) $tags as $tag ) {
$counts[$tag->name] = $tag->count;
$tag_links[$tag->name] = get_tag_link( $tag->term_id );
if ( is_wp_error( $tag_links[$tag->name] ) )
return $tag_links[$tag->name];
$tag_ids[$tag->name] = $tag->term_id;
}

$min_count = min($counts);
$spread = max($counts) - $min_count;
if ( $spread <= 0 )
$spread = 1;
$font_spread = $largest - $smallest;
if ( $font_spread <= 0 )
$font_spread = 1;
$font_step = $font_spread / $spread;

if ( 'name' == $orderby )
uksort($counts, 'strnatcasecmp');
else
asort($counts);

if ( 'DESC' == $order )
$counts = array_reverse( $counts, true );

$a = array();

$rel = ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ) ? ' rel="tag"' : '';

foreach ( $counts as $tag => $count ) {
$tag_id = $tag_ids[$tag];
$tag_link = clean_url($tag_links[$tag]);
$tag = str_replace(' ', ' ', wp_specialchars( $tag ));
$a[] = "\t<option value='$tag_link'>$tag ($count)</option>";
}

switch ( $format ) :
case 'array' :
$return =& $a;
break;
case 'list' :
$return = "<ul class='wp-tag-cloud'>\n\t<li>";
$return .= join("</li>\n\t<li>", $a);
$return .= "</li>\n</ul>\n";
break;
default :
$return = join("\n", $a);
break;
endswitch;

return apply_filters( 'dropdown_generate_tag_cloud', $return, $tags, $args );
}
?>

После этого вы можете создать выпадающее меню. Для этого откройте файл, где вы хотите, чтобы меню отображалось (например, sidebar.php) и вставьте в него следующий код:

<select name="tag-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
<option value="#">Liste d'auteurs</option>
<?php dropdown_tag_cloud('number=0&order=asc'); ?>
</select>

Объяснение кода.

Для того, чтобы этот хак работал, мы переписываем Wordpress-функцию wp_tag_cloud() так, чтобы тэги отображались в HTML-элементе «Select».

Затем, мы просто вызываем только что созданную функцию dropdown_tag_cloud(), чтобы отображать выпадающее меню.

среда, 2 декабря 2009 г.

10 полезных приемов и техник программирования Wordpress - #8 Показываем наиболее популярные посты в сайдбаре

Показываем наиболее популярные посты в сайдбаре

Проблема.

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

Решение.

Этот код действительно прост для понимания. Просто вставьте его туда, где вы хотите, чтобы отображался список популярных материалов. Чтобы выводилось мене 5 или более постов, измените значение SQL-параметра LIMIT в строке номер 3.

<h2>Popular Posts</h2>
<ul>
<?php $result = $wpdb->get_results("SELECT comment_count,ID,post_title FROM $wpdb->posts ORDER BY comment_count DESC LIMIT 0 , 5");
foreach ($result as $post) {
setup_postdata($post);
$postid = $post->ID;
$title = $post->post_title;
$commentcount = $post->comment_count;
if ($commentcount != 0) { ?>
<li><a href="<?php echo get_permalink($postid); ?>" title="<?php echo $title ?>">

<?php echo $title ?></a> {<?php echo $commentcount ?>}</li>
<?php } } ?>
</ul>

Объяснение кода.

В этом коде мы используем объект $wpdb для того, чтобы отправить произвольный SQL-запрос БД Wordpress. Если запрос вернул непустой результат (в данном случае необходимо, чтобы в результате выполнения запроса не содержалось ни одного поста без комментариев), то этот результат отображается в сайдбаре.

вторник, 1 декабря 2009 г.

10 полезных приемов и техник программирования Wordpress - #7 Показываем контент только зарегистрированным пользователям

Показываем контент только зарегистрированным пользователям

Проблема.

Как вы, наверное, знаете, Wordpress позволяет вам разрешать пользователям создавать свои аккаунты и входить в ваш блог под своими учетными записями. А почему бы не сделать часть материалов доступными только для зарегистрированных пользователей? Ну, чтобы они чувствовали себя более значимыми, что ли…

Решение.

Чтобы этот хак заработал, нужно использовать т.н. shortcode (что-то вроде BB-кода). Попробуем это сделать, для чего откроем файл functions.php и вставим в него нижеследующий код:

function member_check_shortcode($atts, $content = null) {
if (is_user_logged_in() && !is_null($content) && !is_feed()) {
return $content;
} else {
return 'Простите, но эта информация доступна только зарегистрированным пользователям!';
}

add_shortcode('member', 'member_check_shortcode');

Теперь вы можете заключать любой контент в shortcode [member]Ваш контент тут[/member], и он будет виден только зарегистрированным пользователям:

[member]
Этот текст будет доступен только зарегистрированным пользователям.
[/member]

Вот и все. А незарегистрированные пользователи будут видеть сообщение с просьбой зарегистрироваться.

Объяснение кода.

Первое, что мы делаем, - это создаем функцию member_check_shortcode, которая проверяет, вошел ли пользователь под своим логином. Если да, то показывается информация, заключенная в shortcode [member]. Если нет, то будет показано сообщение, которое находится на строке номер 5.

10 полезных приемов и техник программирования Wordpress - #6 Добавляем множественные сайдбары

Добавляем множественные сайдбары

Проблема.

Вообще, сайдбар – это круто, так как в них мы можем отображать много очень полезной информации, как-то: похожие посты, информацию об авторе блога или поста, ленту блогов, рекламу и т.д. Но сайдбар можно очень легко забить информацией так, что читатель не всегда может найти то, что ищет. А это очень нехорошо. Что вы скажите про то, чтобы использовать различные сайдбары, наиболее подходящие для данного поста?

Решение.

Чтобы использовать этот хак, скопируйте ваш файл sidebar.php и наполните его необходимой информацией. Сохраните этот файл как sidebar-whatever.php.

Как только вы это сделаете, откройте файл single.php* и найдите в нем вызов функции get_sidebar():

<?php get_sidebar(); ?>

Измените его на:

<?php $sidebar = get_post_meta($post->ID, "sidebar", true);
get_sidebar($sidebar);
?>

После того, как вы сделаете это, создайте произвольное поле sidebar. Установите его значение как имя желаемого сайдбара. Например, если значение поля – right, то Wordpress автоматически подключит файл sidebar-right.php.

Если вы не зададите значение поля sidebar, то Wordpress автоматически подключит сайдбар по умолчанию.

*То же самое проделайте с файлом index.php.

Объяснение кода.

Этот трюк очень прост. Первое, что мы делаем, - создаем произвольное поле sidebar и задаем ему значение. Потом, оно используется как аргумент функции get_sidebar(), которая позволяет подключать соответствующие файлы сайдбаров.