+5.63
Рейтинг
17.43
Сила

Orhideous

Я в недоумении. Честно. Выходит, за реализацию верстки 1 (прописью: одной) статической страницы, той, что можно сделать обычным плагином «Page» — теперь просят 5$. Слов нету, одни эмоции, куда катится LS.
А по-хорошему, нужно выбросить режим TCP, и повесить на сокет.
У меня была ситуация, когда пользователь попросил его удалить. 10к+ топиков, и свыше 80 тысяч комментариев, равномерно размазанных среди миллионов подобных, не говоря уже о связанных объектах.
Запрос mySQL длился 14 минут.
Неверно. 502 дословно значит то, что фронт-енд сервер не смог достучаться до бекенда.
Причина проста: время исполнения скрипта превысило таймаут ожидания, обычно 30с.
Так что если у пользователя много постов и, особенно, комментариев, то тут все админки и скрипты, к сожалению, дружно идут лесом, и выход тут один — через консоль mySQL удалять пользователя. Если движок InnoDB, то внешние ключи (если они заблаговременно написаны) проследят за связностью данных (ON DELETE CASCSDE и иже с ними). Так что советы тут как раз полезные.
Плагин годный, принят в строй вооружения против минусомётчиков. Tnx!
Для того, чтобы не нарушать связность БД. Для MyISAM это мало актуально, но для InnoDB(XtraDB) это критично.
Нет, конечно, всегда можно убрать 1 внешний ключ, но не рекомендуется.
— yay! Наконец-то, новая версия! Спасибо!
*Orhideous со счастливым выражением мордочки улетел на GitHub утащить копию для тестов, не забыв, впрочем, оставить автору заслуженный чай.
— Стабильного кода!
— Ок, сделается.
— Ошибся кнопкой, но не суть.
Вот:

<?php 
/** 
 * Smarty plugin 
 * @package Smarty 
 * @subpackage plugins 
 */ 


/** 
 * Smarty strip_tags modifier plugin 
 * 
 * Type:     modifier
 
 * Name:     strip_tags
 
 * Purpose:  strip html tags from text 
 * @link http://smarty.php.net/manual/en/language.modifier.strip.tags.php 
 *          strip_tags (Smarty online manual) 
 * @author   Monte Ohrt <monte at ohrt dot com> 
 * @author  Jordon Mears <jordoncm at gmail dot com> 
 * @author  Tekin Birdüzen <t.birduezen at web-coding dot eu> 
 * 
 * @version 3.0 
 * 
 * @param string 
 * @param boolean optional 
 * @param string optional 
 * @return string 
 */ 
function smarty_modifier_strip_tags($string) 
{ 
    // HTML5 selfclosing tags 
    $selfclosingTags = array('area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'); 

    /** 
     * Find out how many arguments we have and 
     * initialize the needed variables 
     */ 
    switch (func_num_args()) { 
        case 1: 
            $replace_with_space = true; 
            break; 
        case 2: 
            $arg = func_get_arg(1); 
            if ($arg === 1 || $arg === true || $arg === '1' || $arg === 'true') { 
                // for full legacy support || $arg === 'false' should be included 
                $replace_with_space = ' '; 
                $allowed_tags = ''; 
            } elseif ($arg === 0 || $arg === false || $arg === '0' || $arg === 'false') { 
                // for full legacy support || $arg === 'false' should be removed 
                $replace_with_space = ''; 
                $allowed_tags = ''; 
            } else { 
                $replace_with_space = ' '; 
                $allowed_tags = $arg; 
            } 
            break; 
        case 3: 
            $replace_with_space = func_get_arg(1) ? ' ' : ''; 
            $allowed_tags = func_get_arg(2); 
            break; 
    } 

    if (strlen($allowed_tags)) { 
        // Allowed tags are set 
        $allowed_tags = str_replace(array(' />', '/>', '>'), '', $allowed_tags); 
        $allowed_tags = substr(str_replace('<', '|', $allowed_tags), 1); 

        // This is to delete the allowed selfclosing tags from the list 
        $tagArray = explode('|', $allowed_tags); 
        $selfclosingTags = array_diff($selfclosingTags, $tagArray); 
        unset ($tagArray); 
    } 

    // Let's get rid of the selfclosing tags first 
    if (count($selfclosingTags)) { 
        $string = preg_replace('/<(' . implode('|', $selfclosingTags) . ')\s?[^>]*?\/>/is', $replace_with_space, $string); 
    } 

    // And now the other tags 
    if (strlen($allowed_tags)) { 
        while (preg_match("/<(?!({$allowed_tags}))([a-z1-5]+)\s?[^>]*?>([^<]*?)<\/\\2>/is", $string)) 
            $string = preg_replace("/<(?!({$allowed_tags}))([a-z1-5]+)\s?[^>]*?>([^<]*?)<\/\\2>/is", '$3' . $replace_with_space, $string); 
    } 
    else { 
        // Absolutely no tags allowed 
        while (preg_match("/<([a-z1-5]+)\s?[^>]*?>([^<]*?)<\/\\1>/is", $string)) 
            $string = preg_replace("/<([a-z1-5]+)\s?[^>]*?>([^<]*?)<\/\\1>/is", '$2' . $replace_with_space, $string); 
    } 

    return $string; 
} 

/* vim: set expandtab: */ 
?>


Как этим пользоваться:
{$string|strip_tags} — удаляет все теги и заменяет их пробелами;
{$string|strip_tags:false} — удаляет все теги и не заменяет их пробелами;
{$string|strip_tags:''} — удаляет все теги, за исключением <b> и заменяет их пробелами;
{$string|strip_tags:false:''} strips all tags except b and br tags without replacing them with a space
— У меня к запросам в PMA стойкое отвращение после того, как добавление внешних ключей на InnoDB в консоли шло ~3000c. И это на восьмиядерном i7 с 32Гб оперативной. Смотреть — да. Но не запросы.
— Глобальная автозамена. Если побалуетесь с WHERE и LIKE, заменит только то, что надо.
UPDATE `ls_blog` SET `blog_title` = REPLACE(`blog_title`, 'что заменяем', 'на что заменяем') WHERE 1;
— Гм. Никак. — улыбнулся Orhideous. — Видите ли, модификатор Smarty strip_tags реализован плагином. Прошарьтесь в папке с плагинами, найдете его.
А потом сделайте свой, с понями и аликорнами. Но оригинальный обязательно оставьте.
не работают ± в постах
— А давайте-ка сюда вывод консоли JavaScript. Какие ошибки?
— Есть. Этот сайт. Поиск на этом сайте ответит на 90% ваших вопросов.
— Для текстового поля определите параметры overflow.
— Смотри. Создаешь файл. (dev.js) в папкt js шаблона. Туда кидаешь, к примеру, код моей функции.
подключаешь его в config.php (в списке JS)
$config['head']['default']['js'][] = '___path.static.skin___/js/dev.js';

В видное место темы пишешь ссылку:
<a href="#" onclick="reloadCSS()">CSS</a>

Отключаешь кеширование и склейку CSS.
Всё. Теперь алгоритм работы прост. Изменила-сохранила-нажала на ссылку-посмотрела результат.
— Не нравится что-то мне этот код. Добавим немного магии?

function reloadCSS() {
    css_array = document.evaluate('//head/link[@rel="stylesheet"]', document, null,XPathResult.ANY_TYPE, null);
    do {
        css = css_array.iterateNext();
        if (css != null ) {
            value = css.getAttribute('href');
            cutQ = value.lastIndexOf('?');
            cutA = value.lastIndexOf('&');
            if (cutQ != -1) value = value.substring(0, cutQ);
            if (cutA == -1) css.setAttribute('href', value + '?t=' + new Date().valueOf());
            }
    } while (css != null);
}

И теперь вызываем reloadCSS как угодно.
Плюсы: затрагиваются только CSS, исправлена обработка "&" в href (как в гугловских стилях)