A találati lista egyes elemeinek megjelenését a seach-result.tpl.php
és azon belül a $snippet
szabályozza. Azt nem tudom mi szabályozza, hogy hány darab keresett kifejezés jelenik meg a $snippet
-ben. (Alapbeállítás szerint úgy látom, hogy kettő.) Ellenben a találat megjelenített karakterszáma (elvileg) szabályozható template.php
-ban és tpl.php
-ban is.
function mytheme_preprocess_search_result(&$variables) {
$result = $variables['result'];
$variables['snippet'] = drupal_substr($result['node']->body['und'][0]['value'], 0, 160);
}
Problémák:
html
tag a keresett kifejezés körül<?php print $snippet ?>
helyett ez a forma kell:
<?php print substr($snippet, 0, 300); ?>
Probléma:
tpl.php
fájlokkal…)Pro:
Con:
$snippet
működése nem szabályozhatóPro:
Con:
$snippet
működése nem szabályozhatóA megoldást végül Varga Tomi kollégám szállította egy egyedi preprocess kód formájában (vagyis ennek a template.php
-ban a helye):
function MYTHEME_theme_preprocess_search_result(&$variables) {
$node = $variables['result']['node'];
$node_body = $node->body['und'][0]['safe_value'];
$keys = explode(' ', arg(2));
$node_paragraphes = explode("", $node_body);
$return = '';
foreach($node_paragraphes as $paragraph){
$access = FALSE;
foreach($keys as $key){
if(strpos(strtolower($paragraph), strtolower($key))) {
$paragraph = preg_replace('/<p>/', '', $paragraph);
$paragraph = preg_replace('/' . $key . '/i', '<strong>$0</strong>', $paragraph);
$access = TRUE;
}
}
$return .= $access ? '</p><p class="search-snippet">(…) ' . $paragraph . ' (…)</p>' : '';
}
$variables['snippet'] = $return;
$variables['info'] = '';
}