Форум русской поддержки Joomla!® CMS
28.07.2017, 21:01:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Основной курс по Joomla
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Mambo 4.5 доработать компонент com_search

 (Прочитано 150 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Vaska
Захожу иногда
**

Репутация: +0/-2
Offline Offline

Сообщений: 14


« : 07.06.2017, 21:45:34 »

Приветствую!

Имею сайт на 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
Захожу иногда
**

Репутация: +0/-2
Offline Offline

Сообщений: 14


« Ответ #1 : 08.06.2017, 00:56:01 »

Если пишите мне в личку, то я ещё  не имею прав отвечать на сообщения в личке.
Имейте это в виду.
Записан
Vaska
Захожу иногда
**

Репутация: +0/-2
Offline Offline

Сообщений: 14


« Ответ #2 : 08.06.2017, 19:40:46 »

Задание выполнено!
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet