Автоматическая генерация SeFriendly

Тема в разделе "Vivvo [закрыт]", создана пользователем gimmo, 10 янв 2009.

Статус темы:
Закрыта.
  1. gimmo

    gimmo

    Регистр.:
    4 апр 2007
    Сообщения:
    228
    Симпатии:
    42
    У кого-нибудь работает?
    Я с самого начала не разобрамшись наваял своё прямо в шаблонах, а сейчас чищу потихоньку, и обнаружил что все необходимые функции есть в articles.class.php - только почему-то их никто не вызывает.
    Соответственно не работает в автомате и meta description c keywords.
    Тоесть ручками если вписать оно хранится и выводится - а должно генериться из статьи...
    Это я такой - или так оно и есть?
    403 404 410rc1
     
  2. Saboteur

    Saboteur Постоялец

    Регистр.:
    7 авг 2006
    Сообщения:
    130
    Симпатии:
    38
    гм, скажи ка подробнее про это, где и что править или где эти функции зарыты (строка).

    Я помню что подобное было в фидимпорте (плагин), но до транслитирации кирилицы руки не дошли.
     
  3. gimmo

    gimmo

    Регистр.:
    4 апр 2007
    Сообщения:
    228
    Симпатии:
    42
    номера строк не помогут - они у меня другие из-за ребрэндинга и дописок.
    функции articles.class.php
    get_keywords
    get_sefriendly
    get_description

    Втаскивают всё что надо... ток не вызываются
    Я правил шаблон se_friendly.xml вставляя например article.title вместо article.sefiendly и добавляя общие для всего сайта ключи.
    Это хреново поскольку нельзя нормально вставить Js Regexpы из-за корявости движка.
    Заготовок для транслита полным полно как в JS , так и в РНР - но, как сказано ранее JS не прикрутить , а в пыхе - если бы это кю вызывалось- доступно любому, но оно сволота не вызывается, а как-то почти работает за счёт механики кастомных полей. Т.Е. как обычно - выглядит как настоящее, токма нихрена не делает.
     
  4. gimmo

    gimmo

    Регистр.:
    4 апр 2007
    Сообщения:
    228
    Симпатии:
    42
    Победил - поставил в шаблоне get_xxx вместо ххх - и всё поехало.
    Так всё генерится автоматом.
    Дописал,чего мне не хватало в класс.
    примерно так
    /**
    * Gets $sefriendly
    *
    * @return string
    */
    function get_sefriendly(){
    function translit($str){
    $cyr=array(
    "Щ", "Ш", "Ч", "Ц","Ю", "Я", "Ж", "А","Б","В","Г","Д","Е","Ё","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х", "Ь","Ы","Ъ","Э","Є","Ї",
    "щ", "ш", "ч", "ц","ю", "я", "ж", "а","б","в","г","д","е","ё","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х", "ь","ы","ъ","э","є","ї");
    $lat=array(
    "Shh","Sh","Ch","C","Ju","Ja","Zh","A","B","V","G","D","Je","Jo","Z","I","J","K","L","M","N","O","P","R","S","T","U","F","Kh","J","Y","J","E","Je","Ji",
    "shh","sh","ch","c","ju","ja","zh","a","b","v","g","d","je","jo","z","i","j","k","l","m","n","o","p","r","s","t","u","f","kh","j","y","j","e","je","ji"
    );



    for($i=0; $i<count($cyr); $i++){
    $c_cyr = $cyr[$i];
    $c_lat = $lat[$i];
    $str = str_replace($c_cyr, $c_lat, $str);
    }
    $str = preg_replace("/([qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM]+)[jJ]e/", "\${1}e", $str);
    $str = preg_replace("/([qwrtpsdfghklzxcvbnmQWRTPSDFGHKLZXCVBNM]+)[jJ]/", "\${1}j", $str);
    $str = preg_replace("/([eyuioaEYUIOA]+)[Kk]h/", "\${1}h", $str);
    $str = preg_replace("/^kh/", "h", $str);
    $str = preg_replace("/^Kh/", "H", $str);

    return $str;
    }

    #return $this->sefriendly;
    if ($this->sefriendly){
    return $this->sefriendly;
    }else{
    $title = explode(' ', $this->title);
    $title = implode('_', $title);
    $title = preg_replace ("(\/_)","",$title);
    $title = translit($title);
    $this->title;
    return $title;
    }
    }
    /**
     
  5. Saboteur

    Saboteur Постоялец

    Регистр.:
    7 авг 2006
    Сообщения:
    130
    Симпатии:
    38
    Прозрел, оказывается что оно есть, только его не видно :)

    Не совсем понял каким образом ты вызываешь эти функции, пробовал и так и этак, но не заработало, что не правильно?

    кусок se_friendly.xml
     
  6. gimmo

    gimmo

    Регистр.:
    4 апр 2007
    Сообщения:
    228
    Симпатии:
    42
    4.1?

    -------403---------------------------------------------------------------
    Без всяких инклудов
    <div class="formElement">
    <input type="text" style="width: 140px;" name="ARTICLE_sefriendly" value ="{article.get_sefriendly}" /> .html
    </div>
    прямо по тексту шаблона - там всё есть , просто меняешь article.sefriendly на article.get_sefriendly

    шаблон : (403)---------------------------------------------------------
    <vte:template>
    <div id="article_edit_se_friendly" style="display:none">
    <div class="form_box">
    <div class="form_box_body">
    <div class="form_line">
    <label><vte:value select="{LNG_ADMIN_SEARCH_ENGINE_FRIENDLY_NAME}" />:</label>
    <div class="formElement">
    <input type="text" style="width: 140px;" name="ARTICLE_sefriendly" value ="{article.get_sefriendly}" /> .html
    </div>
    </div>
    <div class="form_line">
    <label><vte:value select="{LNG_ADMIN_META_KEYWORDS}" />:</label>
    <div class="formElement">
    <textarea name="ARTICLE_keywords"><vte:value select="{article.get_keywords}" /></textarea>
    </div>
    </div>
    <div class="form_line">
    <label><vte:value select="{LNG_ADMIN_META_DESCRIPTION}" />:</label>
    <div class="formElement">
    <textarea name="ARTICLE_description"><vte:value select="{article.get_description}" /></textarea>
    </div>
    </div>
    </div>
    </div>
    </div>
    </vte:template>
     
    Saboteur нравится это.
  7. Saboteur

    Saboteur Постоялец

    Регистр.:
    7 авг 2006
    Сообщения:
    130
    Симпатии:
    38
    Отличный подарок на НГ! Благодарю!

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

    Добавлено через 28 минут

    наваял функцию, как говорил

    /**
    * Gets $description
    *
    * @return string
    */
    function get_description(){
    if ($this->description){
    return $this->description;
    }else{
    $description = explode('.', $this->body);
    $description[0] = strip_tags($description[0]);
    return $this->title . ',' . $description[0];
    }
    }

    /**
     
  8. gimmo

    gimmo

    Регистр.:
    4 апр 2007
    Сообщения:
    228
    Симпатии:
    42
    Не совсем так - если всё нормально, поисковик в выдаче выложит твой тайл , а ниже- дескрипшен
    а у тебя там опять тайтл....я беру абстракт
    просто return $this->abstract;
     
  9. Saboteur

    Saboteur Постоялец

    Регистр.:
    7 авг 2006
    Сообщения:
    130
    Симпатии:
    38
    А если абстракта нет, как у меня? Лениво его писать :( Тогда даже нечего, можно изловчиться и пару предложений выдирать.
     
  10. gimmo

    gimmo

    Регистр.:
    4 апр 2007
    Сообщения:
    228
    Симпатии:
    42
    Выдиралка там тоже есть - если нет абстракта, она ташшит начало боди (на первую и в категории). Токмо выдирает по символам - рвёт слова... надо переписывать типа число символов - но рвать по ближайшему пробелу...
     
Статус темы:
Закрыта.