Archive for the ‘Web’ Category

Как отметить сразу много заявок в GoGetLinks

Каждый месяц в ггл дают 200 заявок, которые можно разослать рекламодателям. Руками отмечать нудно, поэтому я посмотрел внутренности и накатал небольшой код, как отметить сразу все заявки на странице. Вводить в адресной строке браузера.

javascript:$(':checkbox[name^="link"]').attr('checked', 'checked'); throw false;

Отмечает только контекстные ссылки, для заметок код вот такой:

javascript:$(':checkbox[name^="post"]').attr('checked', 'checked'); throw false;

ну и для картинок:

javascript:$(':checkbox[name^="img"]').attr('checked', 'checked'); throw false;

Окончания числительных в php

Сегодня надо было решить одну задачку, а именно — вывести цифру и слово, у которого окончание зависит от числа. 5 Человек, 3 человека, 1928 человек и так далее. Самих чисел может быть сколько угодно.

Полез в нет за готовым решением, нашел там одни циклы по условию

if( тут всякие деления по модулю == столько то){
то вывести так}
if( тут еще как нибудь){
вывести так}

Или тоже самое, но вариант switch … case…

Крайне громоздко, особенно если требуется вывести строку только в одном месте.Ну и работает до определенного потолка — если число будет миллион, то надо либо внутри цикла циклом цифру для умножения увеличивать, либо прописывать с руки все варианты.

Еще есть вариант забить все данные в массив и там искать нужную пару значений:

$array = (
"1", "человек",
"2", "человека",
....
if(in_array(....

Проблемы те же, надо либо генерить все возможные варианты, либо какую то хитрую функцию писать, чтобы искать там.

Еще один знакомый прогер подсказал вариант с ngettext. Но там также надо колдовать с расчетами:

<?php
/**
 * Returns:
 *   0, if $n == 1, 21, 31, 41, ...
 *   1, if $n == 2..4, 22..24, 32..34, ...
 *   2, if $n == 5..20, 25..30, 35..40, ...
 */
function plural( $n )
{
    if ( $n % 10 == 1 && $n % 100 != 11 )
    {
        return 0;
    }

    if ( $n % 10 >= 2 && $n % 10 <= 4 && ( $n % 100 < 10 || $n % 100 >= 20 ) )
    {
        return 1;
    }

    return 2;
}

// usage
for ( $i = 0; $i < 100; $i++ )
{
    $x = plural( $i );

    printf(
        "%d тетрад%s<br/>\n", $i,
         ( 0 == $x ? 'ь' : ( 1 == $x ? 'и' : 'ей' ) )
    );
}
?>

Output:
0 тетрадей
1 тетрадь
2 тетради
3 тетради
4 тетради
5 тетрадей
6 тетрадей
7 тетрадей
8 тетрадей
9 тетрадей
10 тетрадей
...

Also here is short version:

<?php
$n = 17;
print ($n%10==1 && $n%100!=11 ? 0 : ($n%10>=2 && $n%10<=4 && ($n%100<10 || $n%100>=20) ? 1 : 2));
?>

output: 2

Тут один фиг на 100 делится, большие числа ну никак не пролезут. Мой вариант, делает тоже самое, только без ограничения на число, вычисляет по последней цифре:

$result = '19321';
$mess = preg_replace("(2|3|4)","тетради", substr($result, -1));
((substr($mess, -1) * 1) > 1 OR (substr($mess, -1) * 1) == 0)  ? $mess = "тетрадей" : $mess = "тетрадь";
echo $result . ' ' .$mess;

В одну строку так и не сумел придумать ((
UPD А вот сумел

echo (( (substr($str, -1) * 1) 1)) ? "тетради" : ( (( (substr($str, -1) * 1) == 0) OR ( (substr($str, -1) * 1) > 4)) ? "тетрадей" : "тетрадь" );

И полезный линк на тернарный оператор

Подстановка ссылок в текст в процентном соотношении.

Накидал вот простенькую функцию, которая запихивает в текст ссылки. Т.е. берется текстовый файл и туда пихаются ссылочки с плотностью, например, 7%.  Функция простенькая, писал себе под один проект. Наверно, весь функционал редбаттона по отдельности скоро напишу, надо свой дорген замутить.

Переменные вызова:
$text, сам текст в который пихаются ссылки. string
$prc, int, процент плотности ссылок.
$links, array, массив со ссылками вида http://site.ru
$nobr, bool, 1 или 0. Если, например, текста 500кб а ссылок 3, указывает, обрубать ли текст после последней ссылки(1) или оставить все 500кб с 3 ссылками.

Листинг:

function AddLinksToText($text, $prc, $links, $nobr){
	$pos = 0;
	$string = "";
	$totalLinks = count($links); 
	$Words = explode(" ", $text); 
	$totalWords = count($Words);
	$needText = $totalLinks * $prc;

	if($totalWords < $needText){
			$prc = floor($totalWords / $totalLinks); //calculate recommended percentage if haven't enough text
			echo @date("r")." not enough text, decrease density to ".$prc."%\r\n";
			$needText = $totalLinks * $prc;
		} else {
			echo @date("r")." working with text, density is ".$prc."%\r\n";
		}
	foreach($links as $num=>$lnk){
					$pos += $prc;
					$Words[$pos] = "<a href=\"".$lnk."\">".$Words[$pos]."</a>";
				}
	if(!isset($nobr)){				
		$tmp = array_slice($Words, 0, $needText + 3);	
		} else {
		$tmp = $Words;
		}

	//return string
	foreach($tmp as $somevar){
		$string .= $somevar." "; 
	}
	return $string;	

}

Dagon sitemap generator и проблемы с ЧПУ

Есть у dagon sitemap generator один такой маленький баг — он при включенных ЧПУ не всегда правильно определяет номер страницы, выводит всегда только первую страницу.  Почему так происходит, я точно не определил, функция get_query_var видимо некорректно срабатывает.

Вылечить можно, добавив несколько строчек в файл плуга sitemap-generator.php

После строк

	$current_page = 1;
	if (get_query_var("pg")) {
		$current_page = get_query_var("pg");
	}

Добавляем:

	$url = $_SERVER['REQUEST_URI'];
        preg_match("([0-9]+)", $url, $out);
        if(($out[0] != $current_page) AND ($out[0] > 1)){ $current_page = $out[0]; }

Это примерно 1074 строка.

Вкратце, что делает код. Он проверяет номер страницы, который определяет сам плагин, с номером страницы в урле. Если они не совпадают, то берет номер страницы из урла. Проверялось на чпу вида /sitemap/4

UPD. Подправил немного, чтобы для нулевой страницы не переопределял номер.

Постинг изображений в wordpress через XML-RPC

небольшой код

 

$username = "username";
    $password = "password";
    $rpcurl = "http://myblog.com/xmlrpc.php";

    $image = fopen("file.jpg","r");
    $file = fread($image,filesize("file.jpg"));
    fclose($image);
    $filetype = "image/jpeg";
    $filename = "testimage.jpg";

$result = wpUploadFileXMLRPC($blogid,$rpcurl,$username,$password,$filename, $filetype, $file);
echo(print_r($result));

function wpUploadFileXMLRPC($blogid,$rpcurl,$username,$password,$filename, $filetype, $file){

    $params = array('',$username,$password,array('name'=>$filename, 'type'=>$filetype,'bits'=>$file,'overwrite'=>true));
    $request = xmlrpc_encode_request('wp.uploadFile',$params);
    $result = makeCall($request,$rpcurl);

    return($result);
}

Количество фолловеров в твиттере числом

По просьбам в коментах.

3 строчки:

<?php
$file = file_get_contents("http://api.twitter.com/1/users/show/alexvolkov.xml");
preg_match("!<followers_count>([0-9]+)<\/followers_count>!", $file, $out);
$count = $out[1];
?>

alexvolkov заменить на свой ник в твиттере.

Тут как получить число всех коментов на блоге
Тут число подписчиков фидбернера

Как убрать category из урла в wordpress

Можно колдовать с category base в настройках, но я нашел в интернетах более простой способ, добавив в functions.php пару строк

function seocategorydel($catlink1) {
 $catlink1 = str_replace('/category', '', $catlink1);
 return $catlink1;
}
add_filter('category_link', 'seocategorydel', 1, 1);
css.php