cut_helper

Каждый топик здесь посвящен конкретной библиотеке или наработкам конкретного проекта

cut_helper

Сообщение Sam Dark » 07 июл 2008, 14:44

Хелпер используется для обрезания текста по спецметке [cut]. Можно использовать, чтобы скрыть часть большой статьи при выводе в ленту новостей.

cut_helper.php
Код: Выделить всё
<?php
//Отрезает часть текста после [cut]
function cut($text){
    return 
preg_replace('~\[cut\].*$~i''…'$text);
}

//Скрывает тэг в полном тексте
function hide_cut($text){
   return 
preg_replace("~\n?[cut]\n?~i"''$text);
}
 
Аватара пользователя
Sam Dark
 
Сообщения: 824
Зарегистрирован: 16 апр 2008, 19:23
Откуда: Воронеж

Re: cut_helper

Сообщение Антон Исайкин » 09 июл 2008, 19:25

Совершенно не понял, зачем это надо. Для обрезки используем
Код: Выделить всё
function cut($text) {
  $text = explode('[cut]', $text, 2);
  return $text[0];
}
 

Дело в том, что в больших проектах часть без ката необходимо хранить отдельно, чтобы не отрезать динамически, поэтому explode с третьим параметром 2 позволит поделить текст на 2 части -- до и после ката. (Параметр "2" необходим потому что в грязном тексте может встречаться слово [cut] несколько раз)

Если надо просто скрыть кат, то можно воспользоваться простым str_replace(). Приведенное выше решение мне непонятно. Как мы знаем, функции, ищущие простое вхождение, гораздо более дешевые, чем регулярки.
Аватара пользователя
Антон Исайкин
Администратор
 
Сообщения: 127
Зарегистрирован: 16 апр 2008, 19:11
Откуда: Санкт-Петербург

Re: cut_helper

Сообщение Sam Dark » 09 июл 2008, 21:56

Кэш — дело хорошее, но не везде его реализация оправдана.

Что до скорости, тут разницы особой нет (0.0002с).
Аватара пользователя
Sam Dark
 
Сообщения: 824
Зарегистрирован: 16 апр 2008, 19:23
Откуда: Воронеж

Re: cut_helper

Сообщение Sam Dark » 09 июл 2008, 22:14

Более быстрая версия без регулярок:
Код: Выделить всё
<?php
//Отрезает часть текста после [cut]
function cut($text){
    $text = explode('[cut]', $text, 2);
    return empty($text[1]) ? $text[0] : $text[0].'…';
}

function hide_cut($text){
   return str_replace(array("\n[cut]\n""[cut]\n", "[cut]\n"'[cut]'), '', $text);
}
 
Аватара пользователя
Sam Dark
 
Сообщения: 824
Зарегистрирован: 16 апр 2008, 19:23
Откуда: Воронеж

Re: cut_helper

Сообщение Антон Исайкин » 09 июл 2008, 22:18

Привет товарищи! У меня для вас новость, ее текст я написал ниже!
[cut]
А новость в том, что если над ним поработать второй твоей функцией, то получится каша. Догадываешься как устранить?
Аватара пользователя
Антон Исайкин
Администратор
 
Сообщения: 127
Зарегистрирован: 16 апр 2008, 19:11
Откуда: Санкт-Петербург

Re: cut_helper

Сообщение Sam Dark » 09 июл 2008, 22:33

Первая:
Привет товарищи! У меня для вас новость, ее текст я написал ниже!


Вторая:
Привет товарищи! У меня для вас новость, ее текст я написал ниже!

А новость в том, что если над ним поработать второй твоей функцией, то получится каша. Догадываешься как устранить?
Аватара пользователя
Sam Dark
 
Сообщения: 824
Зарегистрирован: 16 апр 2008, 19:23
Откуда: Воронеж

Re: cut_helper

Сообщение Антон Исайкин » 09 июл 2008, 22:53

О, я промахнулся взглядом -- не подумал, что замена будет выполняться по порядку, а не по широте вхождения. Тогда мне не понятно назначение хвоста "\n[cut]\n", "[cut]\n", "[cut]\n". К моменту их применения слова [cut] уже не будет.
Аватара пользователя
Антон Исайкин
Администратор
 
Сообщения: 127
Зарегистрирован: 16 апр 2008, 19:11
Откуда: Санкт-Петербург

Re: cut_helper

Сообщение Sam Dark » 09 июл 2008, 23:32

Спасибо, поправил.
Аватара пользователя
Sam Dark
 
Сообщения: 824
Зарегистрирован: 16 апр 2008, 19:23
Откуда: Воронеж

Re: cut_helper

Сообщение Антон Исайкин » 09 июл 2008, 23:34

  1. Правилом хорошего тона считается не править свой пост, если на него есть хотябы один ответ.
  2. Теперь попробуй прогнать через свою функцию мою цитату и поймешь что я имел ввиду.
Аватара пользователя
Антон Исайкин
Администратор
 
Сообщения: 127
Зарегистрирован: 16 апр 2008, 19:11
Откуда: Санкт-Петербург

Re: cut_helper

Сообщение Sam Dark » 09 июл 2008, 23:50

Итого:

Код: Выделить всё
<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
 * Cuts text after [cut] mark
 *
 * @param string $text
 * @return string
 */
function cut($text){
    
$text explode('[cut]'$text2);
    return empty(
$text[1]) ? $text[0] : $text[0].'…';
}

/**
 * Removes [cut] mark from the text
 *
 * @param string $text
 * @return string
 */
function hide_cut($text){
   return 
str_replace('[cut]'''$text);
}
 
Аватара пользователя
Sam Dark
 
Сообщения: 824
Зарегистрирован: 16 апр 2008, 19:23
Откуда: Воронеж

Re: cut_helper

Сообщение bvn » 01 дек 2009, 19:48

Не знаю, кто придумал этот [cut], делали бы как в Wordpress через <!--more--> и не надо уже ничего скрывать, как минимум...
Мой блог: junkabyss.com
Аватара пользователя
bvn
 
Сообщения: 181
Зарегистрирован: 30 авг 2009, 22:39
Откуда: Полтава, Украина


Вернуться в Решения, авторский код и библиотеки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0