如何将ft_min_word_len = 4修改为ft_min_word_len = 1,以便osclass 3.7.1可以搜索最小1个字符的单词,而不是4个?

时间:2017-03-25 11:10:45

标签: search osclass

我想将搜索的最小字符长度从4更改为1.

我找到了关于osclass的文档https://doc.osclass.org/Fine-Tuning_MySQL_Full-Text_Search_-_Improving_search

问题是,从我在主机上使用的数据库中,只有这个有4个字符的限制,其余的有0或没有设置。

所以我需要在osclass数据库中将此ft_min_word_len=4修改为“ft_min_word_len = 1”。

有人可以帮助解决问题吗?我可以访问cpanel和phpMyAdmin

2 个答案:

答案 0 :(得分:0)

事实证明,从我的脚本中,只有osclass使用来自服务器的ft_min_word_len = 4变量。

所以我无法改变它,因为我有一个共享的服务器主机,供应商因此而无法改变它。

答案 1 :(得分:0)

事实证明,还有另一种方法可以避免更改此变量。

我在这里写这个答案是因为如果没有在论坛上分享信息的其他人(https://forums.osclass.org/development/i-am-not-able-to-apply-a-regex-item-title/https://forums.osclass.org/general-help/brilliant-3-letter-word-search-is-possible!!!-read-this-tip/)的帮助,我自己无法解决这个问题。< / p>

所以这里工作2天:

ideea用于在将项目添加到数据库之前过滤项目的标题和描述。此过滤器必须添加&#39; _&#39;对于少于4个字母单词中缺少的每个字母。 例如: e___ ex__ EXA _

为此,我们需要2个功能:  addunderline($ t)和removeunderline($ t)

ideea是将标题,描述和搜索模式中少于4个字符的所有单词转换为使用下划线字符的最少4个字符。

因此,在数据库中会出现像&#34; e ___&#34;等等 然后,当显示信息时,我们使用removeunderline函数。

请在开始之前为您的文件备份!!!

请按照以下步骤操作

对于Osclass 3.7.1和Bender主题:

在复制粘贴代码之前停止并分析代码。我是一个人,错误可能发生,因为我经过多次修改后做了以下说明....

1。 /oc-content/themes/bender/item-post.php

替换

 <?php ItemForm::title_input('title',osc_current_user_locale(), osc_esc_html( bender_item_title() )); ?>

 <?php ItemForm::title_input('title',osc_current_user_locale(), osc_esc_html( removeunderline(bender_item_title()) )); ?>

 <?php ItemForm::description_textarea('description',osc_current_user_locale(), osc_esc_html( bender_item_description() )); ?>

 <?php ItemForm::description_textarea('description',osc_current_user_locale(), osc_esc_html( removeunderline(bender_item_description()) )); ?>
  1. /oc-includes/osclass/gui/item-post.php
  2. 替换

     <?php ItemForm::title_input('title',osc_current_user_locale(), osc_esc_html( bender_item_title() )); ?>
    

     <?php ItemForm::title_input('title',osc_current_user_locale(), osc_esc_html( removeunderline(bender_item_title()) )); ?>
    

     <?php ItemForm::description_textarea('description',osc_current_user_locale(), osc_esc_html( bender_item_description() )); ?>
    

     <?php ItemForm::description_textarea('description',osc_current_user_locale(), osc_esc_html( removeunderline(bender_item_description()) )); ?>
    
    1. 如果您从第13点进行修改,则无需进行这些更改!
    2. /oc-content/themes/bender/item.php

      替换

       osc_item_title()
      

       removeunderline(osc_item_title())
      

       osc_item_description()
      

       removeunderline(osc_item_description())
      

      4。 /oc-content/themes/bender/search.php

      替换

       if(osc_count_items() == 0) {?>
       <p class="empty" ><?php printf(__('There are no results matching "%s"', 'bender'), osc_search_pattern()) ; ?></p>
      

       if(osc_count_items() == 0) {?>
       <p class="empty" ><?php printf(__('There are no results matching "%s"', 'bender'), removeunderline(osc_search_pattern())); ?></p>
      

      5。 /oc-includes/osclass/helpers/hSearch.php

      后:

       /**
        * Gets current search pattern
        *
        * @return string
        */
       function osc_search_pattern() {
           if(View::newInstance()->_exists('search_pattern')) {
               return View::newInstance()->_get('search_pattern');
           } else {
               return '';
           }
       }
      

      添加:

          /**
           * transforms all words with under 4 characters to 4 characters ones
           *
           * @return string
           */
      
       function addunderline($t)
       {
       if(count($t))
       {
        $words = explode(" ", $t);
        for ($i=0; $i<count($words); $i++)
        { $ln=strlen($words[$i]);
        if($ln==1)  $words[$i]=$words[$i].='___';
        if($ln==2)  $words[$i]=$words[$i].='__';
        if($ln==3)  $words[$i]=$words[$i].='_';
        }
        return implode(" ", $words);
       }
       else { return $t;
            }
       }
      
          /**
           * Removes '_' from the end of the 4 characters words
           *
           * @return string
           */
       function removeunderline($t)
       {
       if(count($t))
       {
        $words = explode(" ", $t);
        for ($i=0; $i<count($words); $i++)
        { 
          if(strlen($words[$i])==4)  $words[$i]=chop($words[$i],"_");
      
        }
        return implode(" ", $words);
       }
       else { return $t;
            }
       }
      

      6。 /oc-content/themes/bender/search-sidebar.php

      替换

       <input class="input-text" type="text" name="sPattern"  id="query" value="<?php echo osc_esc_html(osc_search_pattern()); ?>" />
      

       <input class="input-text" type="text" name="sPattern"  id="query" value="<?php echo removeunderline(osc_esc_html(osc_search_pattern())); ?>" />
      

      7。 /oc-includes/osclass/controller/search.php

      替换

       $p_sPattern   = trim(strip_tags(Params::getParam('sPattern')));
      

       $p_sPattern   = addunderline(trim(strip_tags(Params::getParam('sPattern'))));
      

      8。 /oc-content/themes/bender/functions.php

      添加到文件末尾(不要在文件末尾留空行)

       <?php
       function cust_filter_title_description($aItem) {
      
          foreach(@$aItem['title'] as $key => $value) {
              $aItem['title'][$key] = addunderline($value);
          }
      
          foreach(@$aItem['description'] as $key => $value) {
              $aItem['description'][$key] = addunderline($value);
          }
      
          return $aItem;
       }
      
       osc_add_filter('item_add_prepare_data', 'cust_filter_title_description');
       osc_add_filter('item_edit_prepare_data', 'cust_filter_title_description');
       ?>
      

      9。 /oc-includes/osclass/classes/Breadcrumb.php

      替换

       $pattern    = osc_search_pattern();
      

       $pattern    = removeunderline(osc_search_pattern());
      

      如果您从第13点进行修改,则无需进行这些更改[下面的内容使用osc_item_title()]!

      和所有

       osc_item_title()
      

       removeunderline(osc_item_title())
      

      10。 /oc-content/themes/bender/common/head.php

      替换

       <title><?php echo meta_title() ; ?></title>
      

       <title><?php echo removeunderline(meta_title()) ; ?></title>
      

      11.如果您从第13点进行修改,则无需进行这些更改!

      /oc-content/themes/bender/loop-single.php

      全部替换

       osc_item_title()
      

       removeunderline(osc_item_title())
      

       osc_item_description()
      

       removeunderline(osc_item_description())
      

      12.如果您从第14点进行修改,则无需进行这些更改!

      /oc-content/themes/bender/loop-single-premium.php

      替换

       osc_premium_description()
      

       removeunderline(osc_premium_description())
      

      和所有

       osc_premium_title()
      

       removeunderline(osc_premium_title())
      

      13。 /oc-includes/osclass/helpers/hItems.php

      替换

       /**
       * Gets title from current item, if $locale is unspecified $locale is current user locale
       *
       * @param string $locale
       * @return string
       */
       function osc_item_title($locale = "") {
          if ($locale == "") $locale = osc_current_user_locale();
          $title = osc_item_field("s_title", $locale);
          if($title=='') {
              $title = osc_item_field("s_title", osc_language());
              if($title=='') {
                  $aLocales = osc_get_locales();
                  foreach($aLocales as $locale) {
                      $title = osc_item_field("s_title", @$locale['pk_c_code']);
                      if($title!='') {
                          break;
                      }
                  }
              }
          }
          return (string) $title;
       }
      

       /**
       * Gets title from current item, if $locale is unspecified $locale is current user locale
       *
       * @param string $locale
       * @return string
       */
       function osc_item_title($locale = "") {
          if ($locale == "") $locale = osc_current_user_locale();
          $title = osc_item_field("s_title", $locale);
          if($title=='') {
              $title = osc_item_field("s_title", osc_language());
              if($title=='') {
                  $aLocales = osc_get_locales();
                  foreach($aLocales as $locale) {
                      $title = osc_item_field("s_title", @$locale['pk_c_code']);
                      if($title!='') {
                          break;
                      }
                  }
              }
          }
          return (string) removeunderline($title);
       }
      

       /**
       * Gets description from current item, if $locale is unspecified $locale is current user locale
       *
       * @param string $locale
       * @return string $desc
       */
       function osc_item_description($locale = "") {
          if ($locale == "") $locale = osc_current_user_locale();
          $desc = osc_item_field("s_description", $locale);
          if($desc=='') {
              $desc = osc_item_field("s_description", osc_language());
              if($desc=='') {
                  $aLocales = osc_get_locales();
                  foreach($aLocales as $locale) {
                      $desc = osc_item_field("s_description", @$locale['pk_c_code']);
                      if($desc!='') {
                          break;
                      }
                  }
              }
          }
          return (string) $desc;
       }
      

       /**
       * Gets description from current item, if $locale is unspecified $locale is current user locale
       *
       * @param string $locale
       * @return string $desc
       */
       function osc_item_description($locale = "") {
          if ($locale == "") $locale = osc_current_user_locale();
          $desc = osc_item_field("s_description", $locale);
          if($desc=='') {
              $desc = osc_item_field("s_description", osc_language());
              if($desc=='') {
                  $aLocales = osc_get_locales();
                  foreach($aLocales as $locale) {
                      $desc = osc_item_field("s_description", @$locale['pk_c_code']);
                      if($desc!='') {
                          break;
                      }
                  }
              }
          }
          return (string) removeunderline($desc);
       }
      

      14。 /oc-includes/osclass/helpers/hPremium.php

      替换

       /**
       * Gets title from current premium, if $locale is unspecified $locale is current user locale
       *
       * @param string $locale
       * @return string
       */
       function osc_premium_title($locale = "") {
          if ($locale == "") $locale = osc_current_user_locale();
          $title = osc_premium_field("s_title", $locale);
          if($title=='') {
              $title = osc_premium_field("s_title", osc_language());
              if($title=='') {
                  $aLocales = osc_get_locales();
                  foreach($aLocales as $locale) {
                      $title = osc_premium_field("s_title", $locale);
                      if($title!='') {
                          break;
                      }
                  }
              }
          }
          return (string) $title;
       }
      

       /**
       * Gets title from current premium, if $locale is unspecified $locale is current user locale
       *
       * @param string $locale
       * @return string
       */
       function osc_premium_title($locale = "") {
          if ($locale == "") $locale = osc_current_user_locale();
          $title = osc_premium_field("s_title", $locale);
          if($title=='') {
              $title = osc_premium_field("s_title", osc_language());
              if($title=='') {
                  $aLocales = osc_get_locales();
                  foreach($aLocales as $locale) {
                      $title = osc_premium_field("s_title", $locale);
                      if($title!='') {
                          break;
                      }
                  }
              }
          }
          return (string) removeunderline($title);
       }
      

       /**
       * Gets description from current premium, if $locale is unspecified $locale is current user locale
       *
       * @param string $locale
       * @return string $desc
       */
       function osc_premium_description($locale = "") {
          if ($locale == "") $locale = osc_current_user_locale();
          $desc = osc_premium_field("s_description", $locale);
          if($desc=='') {
              $desc = osc_premium_field("s_description", osc_language());
              if($desc=='') {
                  $aLocales = osc_get_locales();
                  foreach($aLocales as $locale) {
                      $desc = osc_premium_field("s_description", $locale);
                      if($desc!='') {
                          break;
                      }
                  }
              }
          }
          return (string) $desc;
       }
      

       /**
       * Gets description from current premium, if $locale is unspecified $locale is current user locale
       *
       * @param string $locale
       * @return string $desc
       */
       function osc_premium_description($locale = "") {
          if ($locale == "") $locale = osc_current_user_locale();
          $desc = osc_premium_field("s_description", $locale);
          if($desc=='') {
              $desc = osc_premium_field("s_description", osc_language());
              if($desc=='') {
                  $aLocales = osc_get_locales();
                  foreach($aLocales as $locale) {
                      $desc = osc_premium_field("s_description", $locale);
                      if($desc!='') {
                          break;
                      }
                  }
              }
          }
          return (string) removeunderline($desc);
       }
      

      结束。

      现在您必须编辑并保存您网站上的列表,或者等待所有列表由他们的autor编辑和保存。(或者在DB中重新生成全文搜索表 - 您可以在线查找有关该列表的详细信息。)< / p>

      OB的。 这使得: - urls,item_titles和item_description在自动生成的电子邮件中保留下划线, - 网址在seo友好网址中保留下划线 - item_title和item_description在osclass管理区域中保留下划线(仅适用于admin,不适用于已登录的用户)。 像bmw x5这样的词,在数据库中成为bmw_ x5,_所以你需要进行修改以添加和删除下划线函数来解决标点符号问题,而不使用&lt;&gt;正则表达式中的字符,因为osclass将它们转换为&lt; ;和&gt; ;如果项目被编辑并保存,则这些字符与每个编辑保存操作相乘。我用一个障碍解决了这个问题。对于不使用&lt;&gt;的用户字符。

      EDIT。

      可以像这样解决项目链接:

      /oc-includes/osclass/helpers/hDefines.php

       $url = str_replace('{ITEM_TITLE}', osc_sanitizeString(removeunderline($item['s_title'])), $url);
      

      而不是

       $url = str_replace('{ITEM_TITLE}', osc_sanitizeString($item['s_title']), $url);
      

      {ITEM_TITLE}和{ITEM_DESCRIPTION}:

      /oc-includes/osclass/emails.php

      将removeunderline()放在{ITEM_TITLE}和{ITEM_DESCRIPTION}值。

      示例:

       $words   = array();
          $words[] = array(
              '{ITEM_DESCRIPTION_ALL_LANGUAGES}',
              '{ITEM_DESCRIPTION}',
              '{ITEM_COUNTRY}',
              '{ITEM_PRICE}',
              '{ITEM_REGION}',
              '{ITEM_CITY}',
              '{ITEM_ID}',
              '{USER_NAME}',
              '{USER_EMAIL}',
              '{ITEM_TITLE}',
              '{ITEM_URL}',
              '{ITEM_LINK}',
              '{VALIDATION_LINK}',
              '{VALIDATION_URL}',
              '{EDIT_LINK}',
              '{EDIT_URL}',
              '{DELETE_LINK}',
              '{DELETE_URL}'
          );
          $words[] = array(
              $all,
              removeunderline($item['s_description']), // here
              $item['s_country'],
              osc_format_price($item['i_price']),
              $item['s_region'],
              $item['s_city'],
              $item['pk_i_id'],
              $item['s_contact_name'],
              $item['s_contact_email'],
              removeunderline($item['s_title']), // here
              $item_url,
              $item_link,
              '<a href="' . $validation_url . '" >' . $validation_url . '</a>',
              $validation_url,
              '<a href="' . $edit_url . '">' . $edit_url . '</a>',
              $edit_url,
              '<a href="' . $delete_url . '">' . $delete_url . '</a>',
              $delete_url
          );
      

      对此文件中的所有{ITEM_TITLE}执行相同操作(10次替换)。

      对此文件中的所有{ITEM_DESCRIPTION}执行相同操作(3次替换)。