Функция склонения слов #

function declension($int, $expressions, $showint = true) {
    settype($int, "integer");
    $count = $int % 100;
    if ($count >= 5 && $count <= 20) {
        $result = ($showint? $int." ":"").$expressions['2'];
    } else {
        $count = $count % 10;
        if ($count == 1) {
            $result = ($showint? $int." ":"").$expressions['0'];
        } elseif ($count >= 2 && $count <= 4) {
            $result = ($showint? $int." ":"").$expressions['1'];
        } else {
            $result = ($showint? $int." ":"").$expressions['2'];
        }
    }
    return $result;
}


echo 'Ваш заказ на '.price_format($total_price).' '.declension($total_price, array('рубль', 'рубля','рублей'), false).'.';

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

Функция рекурсивного создания директорий #

function rmkdir($path, $mode = 0777) {
    $path = rtrim(preg_replace(array("/\\\\/", "/\/{2,}/"), "/", $path), "/");
    $e = explode("/", ltrim($path, "/"));
    if(substr($path, 0, 1) == "/") {
        $e[0] = "/".$e[0];
    }
    $c = count($e);
    $cp = $e[0];
    for($i = 1; $i < $c; $i++) {
        if(!is_dir($cp) && !@mkdir($cp, $mode)) {
            return false;
        }
        $cp .= "/".$e[$i];
    }
    return @mkdir($path, $mode);
}

Поиск уникальных значений в массиве по ключу #

function remove_dups($array, $row_element) {
     $new_array[0] = $array[0];
     foreach ($array as $current) {
         $add_flag = 1;
         foreach ($new_array as $tmp) {
             if ($current[$row_element]==$tmp[$row_element]) {
                 $add_flag = 0; break;
             }
         }
         if ($add_flag) $new_array[] = $current;
     }
     return $new_array;
}


Имеем массив:
2012 - январь
2012 - февраль
2012 - январь

Сортируем его по ключу month
$array2 = remove_dups($array, 'month');


Результат выполнения:
2012 - январь
2012 - февраль

Функция генерации тего (ключевых слов) на PHP #

Выберает из текста вперемешку только слова от 4 символов длинной, генерирует 10($nNumOfTags) тегов.
$nNumTags = 10;
$szContent = strip_tags("Это очень умный текст из которого будут делаться теги");
$arr_tags = explode(' ', $szContent);
shuffle($arr_tags);
$nNumOfTags = 0;
$str_tag = '';
foreach ( $arr_tags as $tvalue ) {
    $tvalue = trim($tvalue);
    preg_match('/[a-zA-Zа-яА-Я]{4,}/', $tvalue, $t_v);
    if ($t_v[0]) {
        $str_tag .= $t_v[0].', ';
        $nNumOfTags ++;
    }
    if ($nNumOfTags > $nNumTags)
    break;
};
//$_POST['tags'] = substr($str_tag, 0, strlen($str_tag)-1);
$tags = substr($str_tag, 0, strlen($str_tag)-1);
echo $tags;
//Результат: теги, которого, делаться, умный, текст, очень, будут,

Выделяем текущий пункт меню отдельным стилем явой jQuery #

Выделяем текущий пункт меню отдельным стилем явой jQuery

Допустим нужно выделить текущий пункт меню отдельным стилем как например сейчас выделен "домой" если это главная страница сайта или "блог" если вы находитесь в разделе блог. Но иногда это сделать просто невозможно (в случае аякса) или сложно из за структуры меню. И тут нам на помощь приходит ява:

Этот сниппет очень прост и заключается в том, что бы из полученного массива ссылок выбрать только ту, у которой атрибут href совпадает с адресом страницы.
$(function () {                                      // Когда страница загрузится
    $('.lmenu a').each(function () {             // получаем все нужные нам ссылки
        var location = window.location.href; // получаем адрес страницы
        var link = this.href;                // получаем адрес ссылки
        if(location == link) {               // при совпадении адреса ссылки и адреса окна
            $(this).addClass('active');  //добавляем класс
        }
    });
});

Нужно выделить и родителей ?
Если у вас древовидное меню, бывает, нужно выделить не только текущую ссылку но и ссылки родительских разделов, для этого используем метод Match(). Код будет таким:
$(function () {                             // когда страница загружена
    $('.lmenu a').each(function () {    // проходим по нужным нам ссылками
        var location = window.location.href // переменная с адресом страницы
        var link = this.href                // переменная с url ссылки
        var result = location.match(link);  // результат возвращает объект если совпадение найдено и null при обратном

        if(result != null) {                // если НЕ равно null
            $(this).addClass('current');    // добавляем класс
        }
    });
});

Скрипт древовидных комментариев PHP #

index.php
$conf['db'] = array(
  "server"=>"localhost",
  "user"=>"root",
  "pass"=>"",
  "base"=>"superbase"
);

mysql_connect($conf['db']['server'], $conf['db']['user'], $conf['db']['pass'])or die("Could not connect: ".mysql_error());
mysql_select_db($conf['db']['base'])or die("Could not select: ".mysql_error());
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");

if($_GET['op'] === 'clear-all'){
  mysql_query("DELETE FROM les_comments");
  header("Location: index.php");
}

$time = time();
  
if(isset($_POST['uname'])){
  $uname = mysql_real_escape_string($_POST['uname']);
  setcookie("unamecom", $uname, $time + 1209600);   // время существования куки две недели
}elseif(isset($_COOKIE["unamecom"])){
  $uname = mysql_real_escape_string($_COOKIE["unamecom"]);
}else{
  $uname = "Аноним";
}

if(!empty($_POST['uname']) && !empty($_POST['message']) && $_POST['op'] == 'add-comment') {


  $comment = mysql_real_escape_string(strip_tags($_POST['message'], "

")); // удалим левые теги
  $ip = $_SERVER['REMOTE_ADDR'];
  $client = $_SERVER['HTTP_USER_AGENT'];
  $content_id = intval($_POST['content']);
  $parent_id = intval($_POST['parent']);

  mysql_query("INSERT INTO les_comments (`id`, `name`, `ip`, `client`, `comment`, `content_id`, `parent_id`, `time`) VALUES (NULL, '$uname', '$ip', '$client', '$comment', '$content_id', '$parent_id', '$time')");
}

/*
*/

$content_id = 0;  // это ключевой идентификатор от конкретной статьи(комменты то разные в каждой статье, помним?)

// выводим комменты
$msg = array();
$result = mysql_query("SELECT * FROM les_comments WHERE content_id='$id'");
while($row = mysql_fetch_assoc($result)){
  $msg[] = $row;
}
$count = count($msg);

$parent = 0;
$form = "






Ваше имя*



";

$i = 0;
if($count){
  $comments = "
Всего комментариев: {$count}Написать комментарий
".$form;
  
  $msg = crazysort($msg);
  while($i<$count){
    $margin = $msg[$i]['level'] * 20;
    $date = date("d.m.Y в H:i",$msg[$i]['time']);
    $comments .= "
{$msg[$i]['name']} ({$date})ответить
{$msg[$i]['comment']}
";
    $i++;
  }  
}else{
  $comments = "
Эту новость ещё не комментировалиНаписать комментарий
".$form;
}

// функция сортирует массив по деревьям
function crazysort(&$comments, $parentComment = 0, $level = 0, $count = null){
  if (is_array($comments) && count($comments)){
    $return = array();
    if (is_null($count)){
      $c = count($comments);
    }else{
      $c = $count;
    }
    for($i=0;$i<$c;$i++){
      if (!isset($comments[$i])) continue;
      $comment = $comments[$i];
      $parentId = $comment['parent_id'];
      if ($parentId == $parentComment){
        $comment['level'] = $level;
        $commentId = $comment['id'];
        $return[] = $comment;
        unset($comments[$i]);
        while ($nextReturn = crazysort($comments, $commentId, $level+1, $c)){
          $return = array_merge($return, $nextReturn);
        }
      }
    }
    return $return;
  }
  return false;
}
?>







Древовидные комментарии для Вашего сайта





echo $comments;
echo "
очистить все комменты
";
?>





sql
CREATE TABLE IF NOT EXISTS `les_comments` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  `ip` VARCHAR(15) NOT NULL,
  `client` VARCHAR(250) NOT NULL,
  `comment` TEXT NOT NULL,
  `content_id` INT(11) NOT NULL DEFAULT '0',
  `parent_id` INT(11) NOT NULL DEFAULT '0',
  `time` INT(10) NOT NULL DEFAULT '0',
  PRIMARY KEY  (`id`)
) ENGINE=MYISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;


style.css
html,body{background-color:#C9CCCD;color:#000000;height:100%;font:normal 14px/20px arial}

.clear{clear:both}

.comments-all{font-size:12px;background-color:#E4E6E6; background-image:url('/images/h-rule.gif');background-repeat:no-repeat;margin-top:30px;margin-bottom:20px;padding:10px 20px; height:20px}
.add-comment{border-bottom:1px dashed #000; cursor:pointer; float:right}
.comment-title{font-size:12px; background-color:#EAEBEB; margin-top:20px; padding:5px 20px;height:20px}
.comment-message{font-size:12px; background-color:#F1F2F2; padding:5px 20px}

.comment{padding:40px 50px}
.editor{display:none; margin-top:1px;padding-top:20px; padding-left:20px;background-color:#F3F5F5}
.comment-ans{float:right; border-bottom:1px dashed #444; cursor:pointer}
#uname{font-size:16px; font-weight:bold;padding:5px;margin:10px 10px 10px 0}
#submit{padding:10px;margin:15px 0;font-weight:bold}