Skip to content
Snippets Groups Projects
Commit c0ed1f3a authored by Laurent's avatar Laurent
Browse files

hotline 17651 number of facets

Search results page: parameter "number of facets to display" now taken
in account
parent c0420e67
Branches
Tags
4 merge requests!563Master,!562Hotline 6.57,!561Dev#17990 miop integration suite,!557Hotline#17651 number of facets
- ticket #17651 : page résultat de recherche - correction de la prise en compte du paramètre "nombre de facettes à afficher".
......@@ -16,10 +16,10 @@
*
* You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
* along with AFI-OPAC 2.0; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
class Class_MoteurRecherche_Facettes {
protected
protected
$_facettes_par_cle = [],
$_nb_facettes_par_cle = [];
......@@ -29,7 +29,7 @@ class Class_MoteurRecherche_Facettes {
->memoize([$req,$preferences,__CLASS__,__FUNCTION__],
function() use($req, $preferences) {
return $this->_getFacettes($req, $preferences);
}
}
);
}
......@@ -45,7 +45,7 @@ class Class_MoteurRecherche_Facettes {
"nombre" => $preferences["tags_nombre"]);
if(!$p_facette["actif"] and !$p_tag["actif"]) return [];
// Lecture des notices
$rows = Zend_Registry::get('sql')->fetchAll($req);
$facettes = $this->getNombreFacettesResultat($rows);
......@@ -53,9 +53,9 @@ class Class_MoteurRecherche_Facettes {
// Constituer le tableau des facettes
$table = $this->extractFacettes($p_facette['types'], $facettes, $p_facette["nombre"]);
if(!$p_tag["actif"])
if(!$p_tag["actif"])
return $table;
// Constituer le tableau des tags
$table['tags'] = $this->extractTags($p_tag['types'], $p_tag['nombre'], $facettes);
......@@ -67,8 +67,8 @@ class Class_MoteurRecherche_Facettes {
$facettes = array();
foreach($rows as $notice) {
$facettes_instances = Class_Notice_Facette::parseFacettesFromNoticeField($notice["facettes"]);
foreach($facettes_instances as $facette) {
foreach($facettes_instances as $facette) {
$cle = $facette->getCle();
$code_rubrique = $facette->getCodeRubrique();
......@@ -89,9 +89,9 @@ class Class_MoteurRecherche_Facettes {
foreach ($facettes as $code_rubrique => $datas) {
arsort($facettes[$code_rubrique]);
uksort($this->_facettes_par_code_rubrique[$code_rubrique],
uksort($this->_facettes_par_code_rubrique[$code_rubrique],
function($cle_a, $cle_b) {
return ($this->_nb_facettes_par_cle[$cle_a] < $this->_nb_facettes_par_cle[$cle_b]) ? 1 : -1;
return ($this->_nb_facettes_par_cle[$cle_a] < $this->_nb_facettes_par_cle[$cle_b]) ? 1 : -1;
});
}
......@@ -121,7 +121,7 @@ class Class_MoteurRecherche_Facettes {
}
return $table;
}
}
public function extractTags($codes_tags, $nombre_tags, $facettes) {
......@@ -129,9 +129,6 @@ class Class_MoteurRecherche_Facettes {
$codification = Class_Codification::getInstance();
$codes = $codification->getCodesLibellesFacette($codes_tags);
// foreach ($codes as $code => $libelle) {
// }
$nb=0;
while(true) {
// On cherche le plus fort pour chaque type
......@@ -144,20 +141,20 @@ class Class_MoteurRecherche_Facettes {
$lig=array_slice($facettes[$code],0,1);
$compare=array_values($lig);
if($compare[0] > $controle["nombre"])
if($compare[0] > $controle["nombre"])
{
$controle["nombre"]=$compare[0];
$controle["nombre"]=$compare[0];
$controle["type"]=$code;
$controle["clef"]=$lig;
}
}
// Si max atteint ou plus de facettes c'est fini
if($yen_a_plus == true) break;
$nb++;
if($nb > $nombre_tags) break;
// On depile l'item des facettes et on empile dans le resultat
$clef = array_last(array_keys($controle['clef']));
$nombre = $controle["clef"][$clef];
......
......@@ -16,21 +16,20 @@
*
* You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
* along with AFI-OPAC 2.0; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
//////////////////////////////////////////////////////////////////////////////////////////
// OPAC3 : Facettes liste de notices
//////////////////////////////////////////////////////////////////////////////////////////
class ZendAfi_View_Helper_Facettes extends ZendAfi_View_Helper_BaseHelper {
protected
protected
$_criteres_recherche,
$_current_facettes;
$_current_facettes,
$_preferences;
function facettes($facettes,$preferences, $criteres_recherche) {
function facettes($facettes, $preferences, $criteres_recherche) {
if(!$facettes) return;
$this->_criteres_recherche= $criteres_recherche;
$this->_criteres_recherche = $criteres_recherche;
$this->_preferences = $preferences;
Class_ScriptLoader::getInstance()
->addJQueryReady('$(".facette .msg>a").click(function(e){ '
......@@ -45,21 +44,21 @@ class ZendAfi_View_Helper_Facettes extends ZendAfi_View_Helper_BaseHelper {
'action' => 'simple',
'page' => null]);
extract($preferences);
$facettes_codes="T".$facettes_codes;
$html = $this->listeFacettesHTML($facettes_codes,$facettes,$url);
return '<div class="facette">'.$html.'</div>';
return
'<div class="facette">'
. $this->listeFacettesHTML("T" . $this->_preferences['facettes_codes'],
$facettes,
$url)
. '</div>';
}
public function listeFacettesHTML($facettes_codes,$facettes,$url) {
$html='<ul>';
foreach($facettes as $type => $valeurs){
if($facettes_codes and strpos($facettes_codes,$type) === false) continue;
$html.='<li class="facette_titre"><b>'.$valeurs["titre"].'</b>';
$html.=$this->listeFacettesElementHTML($type, array_splice($valeurs, 1), $url);
$html.='</li>';
......@@ -67,21 +66,22 @@ class ZendAfi_View_Helper_Facettes extends ZendAfi_View_Helper_BaseHelper {
return $html.='</ul>';
}
public function listeFacettesElementHTML($type,$valeurs,$url){
$facettes_nombre=4;
$facettes_nombre = $this->_preferences['facettes_nombre'];
$first_facets = array_splice($valeurs, 0, $facettes_nombre);
$following_facets = array_splice($valeurs, 0, $facettes_nombre);
$html = '<ul style="list-style-image:url('.URL_IMG.'puce_facette.gif)">';
$first_valeurs = array_splice($valeurs, 0, 4);
foreach($first_valeurs as $facette)
foreach($first_facets as $facette)
$html .= $this->renderLIFacette($url, $facette);
if ($valeurs) {
if ($following_facets) {
$html .= '<li class="msg"><a href="#">'.$this->view->_('Afficher plus de facettes...').'</a><ul id="'.$type.'_msg" style="display:none">';
foreach($valeurs as $facette)
foreach($following_facets as $facette)
$html .= $this->renderLIFacette($url, $facette);
$html .= '</ul></li>';
}
......@@ -97,7 +97,7 @@ class ZendAfi_View_Helper_Facettes extends ZendAfi_View_Helper_BaseHelper {
protected function renderLi($url, $facette) {
return
return
'<li class="facette'.
$this->isFacetteActive($facette['id']).'">'.
$this->view->tagAnchor($this->view->url($url, null, true),
......@@ -111,7 +111,7 @@ class ZendAfi_View_Helper_Facettes extends ZendAfi_View_Helper_BaseHelper {
'</li>';
}
protected function isFacetteActive($facette_id) {
$this->_current_facettes = $this->_criteres_recherche->getFacettes();
......
......@@ -16,7 +16,7 @@
*
* You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
* along with AFI-OPAC 2.0; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
class ZendAfi_View_Helper_FacettesTest extends ViewHelperTestCase {
......@@ -27,43 +27,103 @@ class ZendAfi_View_Helper_FacettesTest extends ViewHelperTestCase {
$this->_helper = new ZendAfi_View_Helper_Facettes();
$this->_helper->setView(new ZendAfi_Controller_Action_Helper_View());
$this->_html = $this->_helper->facettes(['M' => [ 'titre' => 'Matière',
1 => ['id' => 'M6567',
'libelle' => 'Pommes : albums',
'nombre' => 22]],
1 => ['id' => 'M6567',
'libelle' => 'Pommes : albums',
'nombre' => 22]],
'HGENR' => [ 'titre' => 'Genre',
1 => ['id' => 'HGENR0001',
'libelle' => 'Electron libre',
'nombre' => 1]],
1 => ['id' => 'HGENR0001',
'libelle' => 'Electron libre',
'nombre' => 1]],
'Y' => [ 'titre' => 'Annexe',
1 => ['id' => 'YMDE',
'libelle' => 'Maison environnement',
'nombre' => 1]]],
1 => ['id' => 'YMDE',
'libelle' => 'Maison environnement',
'nombre' => 1]],
'A' => ['titre' => 'Author',
1 => ['id' => 'A4656',
'libelle' => 'Caradog Prichard',
'nombre' => 58],
2 => ['id' => 'A4657',
'libelle' => 'Louis-Jean Calvet',
'nombre' => 40],
3 => ['id' => 'A6752',
'libelle' => 'Maurice Henry',
'nombre' => 21],
4 => ['id' => 'A63246',
'libelle' => 'François Chattot',
'nombre' => 12],
5 => ['id' => 'A12309',
'libelle' => 'Olivier Richard',
'nombre' => 10],
6 => ['id' => 'A446',
'libelle' => 'Clare Brown',
'nombre' => 7],
7 => ['id' => 'A800',
'libelle' => 'Karine Delobbe',
'nombre' => 7],
8 => ['id' => 'A12168',
'libelle' => 'Mehdi Lallaoui',
'nombre' => 6],
9 => ['id' => 'A9875',
'libelle' => 'Régine Azria',
'nombre' => 5] ]],
['facettes_codes' => 'YMHGENR',
'facettes_nombre' => 1],
['facettes_codes' => 'YMHGENRA',
'facettes_nombre' => 2],
new Class_CriteresRecherche(['expressionRecherche' => '*']));
}
/** @test */
public function linkForFacettePommeShouldBePresent() {
$this->assertXPathContentContains($this->_html,
'//a[@class="facette"][contains(@href, "/recherche/simple/facette/M6567")]',
public function linkForFacetPommeShouldBePresent() {
$this->assertXPathContentContains($this->_html,
'//a[@class="facette"][contains(@href, "/recherche/simple/facette/M6567")]',
'Pommes : albums');
}
/** @test */
public function linkForFacetteMaisonEnvironnementShouldBePresent() {
$this->assertXPathContentContains($this->_html,
'//a[@class="facette"][contains(@href, "/recherche/simple/facette/YMDE")]',
public function linkForFacetMaisonEnvironnementShouldBePresent() {
$this->assertXPathContentContains($this->_html,
'//a[@class="facette"][contains(@href, "/recherche/simple/facette/YMDE")]',
'Maison environnement');
}
/** @test */
public function linkForFacetLouisJeanCalvetShouldBePresentBeforeDisplayMoreFacets() {
$this->assertXPathContentContains($this->_html,
'//ul[not(@id="A_msg")]//a[@class="facette"][contains(@href, "/recherche/simple/facette/A4657")]',
'Louis-Jean Calvet');
}
/** @test */
public function linkForFacetMauriceHenryShouldBePresentInDisplayMoreFacets() {
$this->assertXPathContentContains($this->_html,
'//ul[@id="A_msg"]//a[@class="facette"][contains(@href, "/recherche/simple/facette/A6752")]',
'Maurice Henry');
}
/** @test */
public function linkForFacetFrancoisChattotShouldBePresentInDisplayMoreFacets() {
$this->assertXPathContentContains($this->_html,
'//ul[@id="A_msg"]//a[@class="facette"][contains(@href, "/recherche/simple/facette/A63246")]',
utf8_encode('François Chattot'));
}
/** @test */
public function linkForFacetteElectroLibreShouldBePresent() {
$this->assertXPathContentContains($this->_html,
'//a[@class="facette"][contains(@href, "/recherche/simple/facette/HGENR0001")]',
public function linkForFacetOlivierRichardShouldNotBePresent() {
$this->assertNotXPath($this->_html,
'//a[@class="facette"][contains(@href, "/recherche/simple/facette/A12309")]');
}
/** @test */
public function linkForFacetElectroLibreShouldBePresent() {
$this->assertXPathContentContains($this->_html,
'//a[@class="facette"][contains(@href, "/recherche/simple/facette/HGENR0001")]',
'Electron libre');
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment