我想将搜索的最小字符长度从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
答案 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()) )); ?>
替换
<?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()) )); ?>
/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次替换)。