Opencart + TecDoc

Статус
В этой теме нельзя размещать новые ответы.
Поделитесь пожалуйста у кого есть рабочая функция:
ReplaceComMeta , это из functions.php, выполняет преобразование/перевод строчки, скачал на форуме раскодированный, так как немного нужно было изменить, не работает подстановка #названий# в мета теги
А с логикой работы как то туговато(. Пока только костыль получилось сделать из этой функции
для 3.0.15
function SetComMeta($Com, $arParams) {
global $TDMCore;
TDMDefineMeta("TITLE", ReplaceComMeta($TDMCore->arDefSEOMeta[$Com . "_TITLE"], $arParams));
TDMDefineMeta("KEYWORDS", ReplaceComMeta($TDMCore->arDefSEOMeta[$Com . "_KEYWORDS"], $arParams));
TDMDefineMeta("DESCRIPTION", ReplaceComMeta($TDMCore->arDefSEOMeta[$Com . "_DESCRIPTION"], $arParams));
TDMDefineMeta("H1", ReplaceComMeta($TDMCore->arDefSEOMeta[$Com . "_H1"], $arParams));
define("TDM_COMSET_SEOMETA", "Y");
 
Спасибо. А если можно, саму ReplaceComMeta, она вызывается как раз в TDMDefineMeta которая SetComMeta, на ход ей подается строчка типа "ARTICLE BRAND NAME" и массив $arMData(h1, title и прочие).
там код вида:
Код:
function ReplaceComMeta($String, $arMData)
{
    $SegKey = null;

    if ($String != "") {
        $TotalChars = StrLen($String);
        $NewSeg = true;
        $w = 0;
        while ($w < $TotalChars) {
            if ($String[$w] == "#") {
                if ($NewSeg == true) {
                    $NewSeg = false;
                } else {
                    $NewSeg = true;
                    ++$SegKey;
                    continue;
                }
            }
        .......
}
докопался что в ней проблема, немного изменил, но так ничего не получилось, разбиение на подстроки по разделителю, перевод и формирование происходит как то не понятно для меня(
 
Спасибо. А если можно, саму ReplaceComMeta, она вызывается как раз в TDMDefineMeta которая SetComMeta, на ход ей подается строчка типа "ARTICLE BRAND NAME" и массив $arMData(h1, title и прочие).
там код вида:
Код:
function ReplaceComMeta($String, $arMData)
{
    $SegKey = null;

    if ($String != "") {
        $TotalChars = StrLen($String);
        $NewSeg = true;
        $w = 0;
        while ($w < $TotalChars) {
            if ($String[$w] == "#") {
                if ($NewSeg == true) {
                    $NewSeg = false;
                } else {
                    $NewSeg = true;
                    ++$SegKey;
                    continue;
                }
            }
        .......
}
докопался что в ней проблема, немного изменил, но так ничего не получилось, разбиение на подстроки по разделителю, перевод и формирование происходит как то не понятно для меня(
потому что Вы не видите общей картины
 
та вроде общую как раз понял. Не была понятна логика работы в самом
ReplaceComMeta, в части замены и переводов.
Нужно было делать перевод(так как магазин мультиязычный) #слов" в seo тегах
К примеру #SEO_PARTS_HEADER# BRAND MODEL DATE #SEO_AUTOPARTS# BRAND MODEL #SEO_BUY_PARTS# BRAND MODEL #SEO_BUY_AUTOPARTS# BRAND MODEL
Куда соответственно подставляются:
"запчасити ALFA ROMEO 145, автозапчасти ALFA ROMEO 145, купить запчасти ALFA ROMEO 145, купить автозапчасти ALFA ROMEO"

Пока переписал эту ReplaceComMeta(по хорошему получился г-код наверное, так как использовал аж 3 цикла) но все работает. С тем что было в ReplaceComMeta конечно хотелось бы разобраться...


Код:
function ReplaceComMeta($string, $arMData)
{
    $SegKey = null;

    if ($string != "") {
       
        $newSegment = false; // тригер нового сегмента
        $arrayWordTraslate = array();


        for($i = 0, $c = strlen($string); $i < $c; $i++){

            if ($string[$i] == "#") {
                if ($newSegment == true) { // Если сегмент  уже есть значит это слово закончилось                   

                    $arrayWordTraslate[] = array(
                        'start' => $wordStart,
                        'end' => $i,
                    );

                    $newSegment = false; // Возвращаяем тригер в исходную
                    $wordStart = 0; //


                } else {
                    $newSegment = true; 
                    $wordStart = $i; // Записываем точку начала
                }
            }
        }
       
        $replaceArr = array();
       
        // Проходимся по массиву $arrayWordTraslate выбирая слова, выполняя перевод, и формируем массив замены $replaceArr
        foreach ($arrayWordTraslate as $word){   
            $word_to_traslate =  substr($string, $word['start'], $word['end'] - $word['start']+1);
            $replaceArr[$word_to_traslate] = Lng(str_replace("#", "", $word_to_traslate), 0, 0);
        }

        // Заменяем значения в строке
        foreach ($replaceArr as $key => $value){
           
            $string = str_replace($key, $value, $string);           
        }
       
        if (count($arMData) > 0) {
           
            foreach ($arMData as $CODE => $VALUE) {
                $string = str_replace($CODE, $VALUE, $string);
            }


        }
    }
   
   
   
    return $string;
}
 
та вроде общую как раз понял. Не была понятна логика работы в самом
ReplaceComMeta, в части замены и переводов.
Нужно было делать перевод(так как магазин мультиязычный) #слов" в seo тегах
К примеру #SEO_PARTS_HEADER# BRAND MODEL DATE #SEO_AUTOPARTS# BRAND MODEL #SEO_BUY_PARTS# BRAND MODEL #SEO_BUY_AUTOPARTS# BRAND MODEL
Куда соответственно подставляются:
"запчасити ALFA ROMEO 145, автозапчасти ALFA ROMEO 145, купить запчасти ALFA ROMEO 145, купить автозапчасти ALFA ROMEO"

Пока переписал эту ReplaceComMeta(по хорошему получился г-код наверное, так как использовал аж 3 цикла) но все работает. С тем что было в ReplaceComMeta конечно хотелось бы разобраться...


Код:
function ReplaceComMeta($string, $arMData)
{
    $SegKey = null;

    if ($string != "") {
      
        $newSegment = false; // тригер нового сегмента
        $arrayWordTraslate = array();


        for($i = 0, $c = strlen($string); $i < $c; $i++){

            if ($string[$i] == "#") {
                if ($newSegment == true) { // Если сегмент  уже есть значит это слово закончилось                  

                    $arrayWordTraslate[] = array(
                        'start' => $wordStart,
                        'end' => $i,
                    );

                    $newSegment = false; // Возвращаяем тригер в исходную
                    $wordStart = 0; //


                } else {
                    $newSegment = true;
                    $wordStart = $i; // Записываем точку начала
                }
            }
        }
      
        $replaceArr = array();
      
        // Проходимся по массиву $arrayWordTraslate выбирая слова, выполняя перевод, и формируем массив замены $replaceArr
        foreach ($arrayWordTraslate as $word){  
            $word_to_traslate =  substr($string, $word['start'], $word['end'] - $word['start']+1);
            $replaceArr[$word_to_traslate] = Lng(str_replace("#", "", $word_to_traslate), 0, 0);
        }

        // Заменяем значения в строке
        foreach ($replaceArr as $key => $value){
          
            $string = str_replace($key, $value, $string);          
        }
      
        if (count($arMData) > 0) {
          
            foreach ($arMData as $CODE => $VALUE) {
                $string = str_replace($CODE, $VALUE, $string);
            }


        }
    }
  
  
  
    return $string;
}
в оригинале так
function ReplaceComMeta($String, $arMData) {
if ($String != "") {
$TotalChars = StrLen($String);
$NewSeg = false;
$w = 0;
while ($w < $TotalChars) {
if ($String[$w] == "#") {
if ($NewSeg == true) {
$NewSeg = false;
}
else {
$NewSeg = true;
++$SegKey;
continue;
}
}
if ($NewSeg == true) {
$arSegments[$SegKey] .= $String[$w];
}
++$w;
}
if (0 < count($arSegments)) {
foreach ($arSegments as $Segment) {
$String = str_replace($Segment, Lng($Segment, 0, 0), $String);
}
}
$String = str_replace("#", "", $String);
if (0 < count($arMData)) {
foreach ($arMData as $CODE => $VALUE) {
$String = str_replace($CODE, $VALUE, $String);
}
}
}
return $String;
}
может поможет переработать
 
Доброе утро. Подскажите плиз, какая таблица в базе ТД отвечает за список моделей?
После накатки базы бренды появились, но в них нет списка моделей. По всем брендам выдает ошибку "No models of this manufacturer ..."
 
Доброе утро. Подскажите плиз, какая таблица в базе ТД отвечает за список моделей?
После накатки базы бренды появились, но в них нет списка моделей. По всем брендам выдает ошибку "No models of this manufacturer ..."
покажите какие таблицы вы загрузили
 
покажите какие таблицы вы загрузили

+-----------------------+
| Tables_in_auto_td |
+-----------------------+
| ACCESSORY_LISTS |
| ACL_CRITERIA |
| ALI_COORDINATES |
| ARTICLES |
| ARTICLES_NEW |
| ARTICLE_CRITERIA |
| ARTICLE_INFO |
| ARTICLE_LISTS |
| ARTICLE_LIST_CRITERIA |
| ART_COUNTRY_SPECIFICS |
| ART_LOOKUP |
| AXLES |
| AXL_BRAKE_SIZES |
| BRANDS |
| CONST_PATTERN_LOOKUP |
| COUNTRIES |
| COUNTRY_DESIGNATIONS |
| CRITERIA |
| CV_CABS |
| CV_MARKS |
| CV_SECONDARY_TYPES |
| DESIGNATIONS |
| DES_TEXTS |
| DOC_TYPES |
| ENGINES |
| ENG_COUNTRY_SPECIFICS |
| ENG_LOOKUP |
| ERR_TRACK_KEY_VALUES |
| FILTERS |
| GENERIC_ARTICLES |
| GRAPHICS |
| KEY_VALUES |
| LANGUAGES |
| LA_CRITERIA |
| LA_INFO |
| LINK_ART |
| LINK_ART_GA |
| LINK_CAB_TYP |
| LINK_GA_CRI |
| LINK_GA_STR |
| LINK_GRA_ART |
| LINK_GRA_LA |
| LINK_LA_AXL |
| LINK_LA_AXL_NEW |
| LINK_LA_ENG |
| LINK_LA_ENG_NEW |
| LINK_LA_MRK |
| LINK_LA_MRK_NEW |
| LINK_LA_TYP |
| LINK_LA_TYP_NEW |
| LINK_SHO_STR |
| LINK_SHO_STR_TYPE |
| LINK_TYP_ENG |
| LINK_TYP_MRK |
| MANUFACTURERS |
| MODELS |
| MOD_TYP_LOOKUP |
| NUMBERPLATES_NL |
| PARAMETERS |
| PRICES |
| SEARCH_TREE |
| SHORTCUTS |
| STR_FAMILY_TREE |
| STR_LOOKUP |
| SUPERSEDED_ARTICLES |
| SUPPLIERS |
| SUPPLIER_ADDRESSES |
| SUPPLIER_LOGOS |
| TEXT_MODULES |
| TEXT_MODULE_TEXTS |
| TYPES |
| TYPE_NUMBERS |
| TYP_COUNTRY_SPECIFICS |
| TYP_SUSPENSIONS |
| TYP_VOLTAGES |
| TYP_WHEEL_BASES |
| UTILITY_DIRECT |
+-----------------------+
77 rows in set (0,00 sec)
 
+-----------------------+
| Tables_in_auto_td |
+-----------------------+
| ACCESSORY_LISTS |
| ACL_CRITERIA |
| ALI_COORDINATES |
| ARTICLES |
| ARTICLES_NEW |
| ARTICLE_CRITERIA |
| ARTICLE_INFO |
| ARTICLE_LISTS |
| ARTICLE_LIST_CRITERIA |
| ART_COUNTRY_SPECIFICS |
| ART_LOOKUP |
| AXLES |
| AXL_BRAKE_SIZES |
| BRANDS |
| CONST_PATTERN_LOOKUP |
| COUNTRIES |
| COUNTRY_DESIGNATIONS |
| CRITERIA |
| CV_CABS |
| CV_MARKS |
| CV_SECONDARY_TYPES |
| DESIGNATIONS |
| DES_TEXTS |
| DOC_TYPES |
| ENGINES |
| ENG_COUNTRY_SPECIFICS |
| ENG_LOOKUP |
| ERR_TRACK_KEY_VALUES |
| FILTERS |
| GENERIC_ARTICLES |
| GRAPHICS |
| KEY_VALUES |
| LANGUAGES |
| LA_CRITERIA |
| LA_INFO |
| LINK_ART |
| LINK_ART_GA |
| LINK_CAB_TYP |
| LINK_GA_CRI |
| LINK_GA_STR |
| LINK_GRA_ART |
| LINK_GRA_LA |
| LINK_LA_AXL |
| LINK_LA_AXL_NEW |
| LINK_LA_ENG |
| LINK_LA_ENG_NEW |
| LINK_LA_MRK |
| LINK_LA_MRK_NEW |
| LINK_LA_TYP |
| LINK_LA_TYP_NEW |
| LINK_SHO_STR |
| LINK_SHO_STR_TYPE |
| LINK_TYP_ENG |
| LINK_TYP_MRK |
| MANUFACTURERS |
| MODELS |
| MOD_TYP_LOOKUP |
| NUMBERPLATES_NL |
| PARAMETERS |
| PRICES |
| SEARCH_TREE |
| SHORTCUTS |
| STR_FAMILY_TREE |
| STR_LOOKUP |
| SUPERSEDED_ARTICLES |
| SUPPLIERS |
| SUPPLIER_ADDRESSES |
| SUPPLIER_LOGOS |
| TEXT_MODULES |
| TEXT_MODULE_TEXTS |
| TYPES |
| TYPE_NUMBERS |
| TYP_COUNTRY_SPECIFICS |
| TYP_SUSPENSIONS |
| TYP_VOLTAGES |
| TYP_WHEEL_BASES |
| UTILITY_DIRECT |
+-----------------------+
77 rows in set (0,00 sec)
у вас есть все необходимы таблицы ( так же как и куча лишних) дело скорее всего в том что база у вас битая
 
у вас есть все необходимы таблицы ( так же как и куча лишних) дело скорее всего в том что база у вас битая
какая именно таблица(таблицы) из этого списка отвечает за модели?

Таблица MODELS содержит 12 500 записей, но в ней только IDшники.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху