0 Пользователей и 1 Гость просматривают эту тему.
  • 2 Ответов
  • 183 Просмотров
*

Vaska

  • Захожу иногда
  • 14
  • -2
Приветствую!

Имею сайт на Mambo 4.5.
Включен SEF.

Страницы контента имеют ссылки: http://mysite.ru/content/view/440/115/
440 - это ID страницы контента
115 - это ID меню

Есть проблема с поиском на сайте, с компонентом com_search.
При выводе найденного в компоненте поиска, ссылка имеет вид http://mysite.ru/content/view/440/
То-есть не выводится, в ссылке, ID меню.
По этой причине весь контент имеет дубли.

Нужно доработать компонент com_search, чтобы ссылки имели вид http://mysite.ru/content/view/440/115/

Компонент http://mysite.ru/content/view/440/115/ состоит из двух файлов и ссылается на ещё один файл класса weblinks.class.php.
Прикрепляю все три файла.

\components\com_search\search.php
Код
<?php

defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

/**
* To be implemented in Version 4.6
*/
function mosLogSearch( $search_term ) {
global $database;
global $mosConfig_enable_log_searches;

if (@$mosConfig_enable_log_searches) {
$database->setQuery( "SELECT hits"
. "\nFROM #__core_log_searches"
. "\nWHERE LOWER(search_term)='$search_term'" );
$hits = intval( $database->loadResult() );
echo $database->getErrorMsg();
if ($hits) {
$database->setQuery( "UPDATE #__core_log_searches SET hits=(hits+1)"
. "\nWHERE LOWER(search_term)='$search_term'" );
$database->query();
echo $database->getErrorMsg();
} else {
$database->setQuery( "INSERT INTO #__core_log_searches VALUES"
. "\n('$search_term','1')" );
$database->query();
echo $database->getErrorMsg();
}
}
}

require_once( $mainframe->getPath( 'front_html' ) );

$gid = $my->gid;

search_html::openhtml( htmlspecialchars( $searchword ) );

$searchword = mosGetParam( $_REQUEST, 'searchword', '' );
$searchword = $database->getEscaped( trim( $searchword ) );

$search_ignore = array();
@include "$mosConfig_absolute_path/language/$mosConfig_lang.ignore.php";

search_html::searchbox( htmlspecialchars( $searchword ) );
if (!$searchword) {
search_html::message( _NOKEYWORD );
} else if (in_array( $searchword, $search_ignore )) {
search_html::message( _IGNOREKEYWORD );
} else {
search_html::searchintro( htmlspecialchars( $searchword ) );

mosLogSearch( $searchword );

$totalRows = 0;

// current content
$obj = new mosContent( $database );
$rows = $obj->search( $searchword );
$totalRows += count( $rows );
unset( $obj );

// archived content
$obj = new mosContent( $database );
$archived = $obj->search( $searchword, '-1', 'Archived ' );
unset( $obj );

// this needs to be more dynamic? not hardcoded
require_once( "components/com_weblinks/weblinks.class.php" );

$obj = new mosWeblink( $database );
// merge the weblinks results, columns must match format of content
$rows = array_merge( $rows, $obj->search( $searchword ) );
unset( $obj );

// bring current and archived together, with the latter at the end
$rows = array_merge( $rows, $archived );
$totalRows = count( $rows );

// выводит содержание найденного, но не ссылку
for ($i=0, $n=count($rows); $i < $n; $i++) {
$row = &$rows[$i]->text;
$row = preg_replace( "'<script[^>]*>.*?</script>'si", "", $row );
$row = str_replace( '{mosimage}', '', $row );
$row = preg_replace( '/<a\s+.*?href="([^"]+)"[^>]*>([^<]+)<\/a>/is','\2 (\1)', $row );
$row = preg_replace( '/<!--.+?-->/', '', $row);
$row = preg_replace( '/{.+?}/', '', $row);
$row = substr( strip_tags( $row ), 0, 50 );
}
////////////////////

if ($n) {
search_html::display( $rows );
} else {
search_html::displaynoresult();
}

search_html::conclusion( $totalRows, htmlspecialchars( $searchword ) );
}
?>


\components\com_search\search.html.php

Код
<?php

defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

class search_html {
function openhtml( $searchword ) {
?>
<h2 class="b-module-lined-headline m-09-techspecs-headline">
      <span><?php echo _SEARCH_TITLE; ?></span>
    </h2>
<?php
}

function searchbox( $searchword ) {
?>
<form action="index.php" method="POST">
  <div class="module-grid">

    <div class="form-group has-feedback">
      <label for="inputEmail" class="control-label col-sm-3"><?php echo _PROMPT_KEYWORD; ?>:</label>
      <div class="col-sm-9">
<input type="text" name="searchword" style="max-width:100%" value="<?php echo stripslashes($searchword);?>" class="inputbox2" />
    </div>
  </div>

  <div class="buttonSet row">
    <div class="col-xs-12 text-right"><input type="submit" name="submit" value="<?php echo _SEARCH_TITLE;?>" class="button" /></div>
  </div>
</div>
<input type="hidden" name="option" value="com_search" />
</form>

<div class="margintop40"></div>
  <?php
}

function searchintro( $searchword ) {
?>
   <h2><?php echo _PROMPT_KEYWORD; ?>: <strong><?php echo stripslashes($searchword); ?></strong>
<?php
}

function message( $message ) {
?>
    <div class="alert alert-info">
<?php
eval ('echo "'.$message.'";');
?>
</div>
<div class="marginbottom50"></div>
<?php
}

function displaynoresult() {
echo "</h2>";
}

function display( &$rows ) {
global $mosConfig_offset;
$c = count ($rows); eval  ('echo "'._NUM_RESULTS.'";'); ?>
</div>
<div class="marginbottom40"></div>
<?php
$tabclass = array("sectiontableentry1", "sectiontableentry2");
$k = 0;
  ?>
<div class="table-responsive">
<table class="table table-striped comcontent">
  <?php
  foreach ($rows as $row) {
$arrDateTime = explode(" ", $row->created);
$arrDate = explode("-", $arrDateTime[0]);
$arrTime = explode(":", $arrDateTime[1]);
$created = strftime ("%e %B", mktime ($arrTime[0],$arrTime[1],$arrTime[2],$arrDate[1],$arrDate[2],$arrDate[0]) + $mosConfig_offset*60*60);
  ?>



  <tr>
    <td width="5%"><?php echo $created; ?></td>
    <td><a href="<?php echo sefRelToAbs($row->href); ?>"><?php echo $row->title;?></a></td>
    <td><span class="small"><?php echo $row->section; ?></span></td>
  </tr>
 
  <tr class="success">
    <td></td>
    <td><?php echo $row->text;?> &#133; </td>
    <td></td>
  </tr>
  <?php
  $k = 1 - $k;
  }
}


function conclusion( $totalRows, $searchword ) {
global $mosConfig_live_site;
?>
  <tr>
    <td colspan="3">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="3">
<?php
eval ('echo "'._CONCLUSION.'";');
?>
  </tr>
</table>
</div>
<div class="marginbottom40"></div>
<?php
}
}
?>


\components\com_weblinks\weblinks.class.php

Код
<?php
// $Id: weblinks.class.php,v 1.5 2004/03/19 17:41:13 rcastley Exp $
/**
* Content code
* @package Mambo Open Source
* @Copyright (C) 2000 - 2003 Miro International Pty Ltd
* @ All rights reserved
* @ Mambo Open Source is Free Software
* @ Released under GNU/GPL License : http://www.gnu.org/copyleft/gpl.html
* @version $Revision: 1.5 $
**/

defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

/**
* Web Links Class
* @package Weblinks
* @copyright 2000-2003 Miro International Pty Ltd
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
* @version $Revision: 1.5 $
*/

/**
* Category database table class
*/
class mosWeblink extends mosDBTable {
/** @var int Primary key */
var $id=null;
/** @var int */
var $catid=null;
/** @var int */
var $sid=null;
/** @var string */
var $title=null;
/** @var string */
var $url=null;
/** @var string */
var $description=null;
/** @var datetime */
var $date=null;
/** @var int */
var $hits=null;
/** @var int */
var $published=null;
/** @var boolean */
var $checked_out=null;
/** @var time */
var $checked_out_time=null;
/** @var int */
var $ordering=null;
/** @var int */
var $archived=null;
/** @var int */
var $approved=null;

/**
* @param database A database connector object
*/
function mosWeblink( &$db ) {
$this->mosDBTable( '#__weblinks', 'id', $db );
}
// overloaded check function
function check() {
// filter malicious code
$this->filter();

// specific filters
$iFilter = new InputFilter();

if ($iFilter->badAttributeValue( array( 'href', $this->url ))) {
$this->_error = 'Please provide a valid URL';
return false;
}

// check for valid name
if (trim( $this->title ) == '') {
$this->_error = _WEBLINK_TITLE;
return false;
}

if (!(eregi("http://", $this->url) || (eregi("https://",$this->url)))) {
$this->url = "http://".$this->url;
}

// check for existing name
$this->_db->setQuery( "SELECT id FROM #__weblinks "
. "\nWHERE title='$this->title' AND catid='$this->catid'"
);

$xid = intval( $this->_db->loadResult() );
if ($xid && $xid != intval( $this->id )) {
$this->_error = _WEBLINK_EXIST;
return false;
}
return true;
}

/**
* @param string Target search string
*/
function search( $text, $state='', $sectionPrefix='' ) {
$text = trim( $text );
if ($text == '') {
return array();
}

$this->_db->setQuery( "SELECT date AS created, title,"
. "\n url AS href, description AS text, '1' AS browsernav, '{$sectionPrefix}Weblinks' AS section"
. "\nFROM #__weblinks WHERE (title LIKE '%$text%'"
. "\n OR description LIKE '%$text%')"
. "\n ORDER BY created DESC"
);

return $this->_db->loadObjectList();
}
}
?>

Не предлагайте обновиться до новой версии. Буду расценивать как флуд.
ФТП-доступа нет.

Заплачу 800 руб. на ЯД или на карту Сбербанка.
*

Vaska

  • Захожу иногда
  • 14
  • -2
Re: Mambo 4.5 доработать компонент com_search
« Ответ #1 : 07.06.2017, 23:56:01 »
Если пишите мне в личку, то я ещё  не имею прав отвечать на сообщения в личке.
Имейте это в виду.
*

Vaska

  • Захожу иногда
  • 14
  • -2
Re: Mambo 4.5 доработать компонент com_search
« Ответ #2 : 08.06.2017, 18:40:46 »
Задание выполнено!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Снова по CSS

Автор Atlant77

Ответов: 1
Просмотров: 172
Последний ответ 18.06.2017, 07:42:43
от draff
Mambo 4.5 исправить редактор (обрезает теги)

Автор Vaska

Ответов: 12
Просмотров: 500
Последний ответ 17.06.2017, 17:57:19
от Taatshi
Нужно разобраться, что приводит к огромно

Автор ninko1

Ответов: 9
Просмотров: 251
Последний ответ 24.04.2017, 20:28:56
от ninko1
Фото лента для сайта

Автор ecs23

Ответов: 1
Просмотров: 221
Последний ответ 05.01.2017, 03:50:21
от era
Доработка VirtueMart

Автор seoboy

Ответов: 0
Просмотров: 162
Последний ответ 11.12.2016, 15:32:34
от seoboy