Finne den rette veien: hvordan fasettert navigasjon påvirker SEO (oversettelse). Fasetterte navigasjonsløsninger

Vi tok en rask titt på installasjonen og grunnleggende syntaks for PINQ, som har blitt overført til PHP-versjon LINQ. I denne artikkelen skal vi se på hvordan du bruker PINQ til å simulere den fasetterte søkefunksjonen i MySQL.

I denne artikkelen vil vi ikke dekke alle aspekter ved fasettert søk. Interesserte kan søke etter passende informasjon på Internett.

Typisk fasettsøk fungerer slik:

  • Bruker går inn nøkkelord, eller flere nøkkelord å søke etter. For eksempel "ruter" for å søke etter produkter der ordet "ruter" vises i beskrivelsen, nøkkelord, kategorinavn, tagger osv.
  • Nettstedet returnerer en liste over produkter som samsvarer med disse kriteriene.
  • Nettstedet inneholder flere lenker for å tilpasse søkeordene dine. For eksempel kan det tillate deg å spesifisere spesifikke ruterprodusenter, eller angi en prisklasse eller andre funksjoner.
  • Brukeren kan fortsette å spesifisere tilleggskriterier søk for å få datasettet av interesse.

Fasettsøk er veldig populært og er det kraftig verktøy, kan det observeres på nesten alle e-handelsrelaterte nettsteder.

Dessverre er fasettert søk ikke innebygd i MySQL. Så hva skal vi gjøre hvis vi fortsatt bruker MySQL, men ønsker å gi brukeren denne muligheten?

Med PINQ, som har en lignende, kraftig og enkel tilnærming, kan vi oppnå samme oppførsel som om vi brukte andre databasemotorer.

Utvider demoen fra første del

Kommentar: All kode fra denne delen, og fra den første delen, finnes i depotet.

I denne artikkelen skal vi utvide demoen fra del 1 med en betydelig forbedring i form av fasettsøk.

La oss starte med index.php ved å legge til følgende linjer:

$app->get("demo2", function () bruk ($app) ( global $demo; $test2 = new pinqDemo\Demo($app); return $test2->test2($app, $demo->test1 ($app)); )); $app->get("demo2/facet/(key)/(verdi)", funksjon ($key, $value) bruk ($app) ( global $demo; $test3 = new pinqDemo\Demo($app); return $test3->test3($app, $demo->test1($app), $key, $value); ));

Den første ruten tar oss til en side for å se alle innlegg som samsvarer med søkeordet. For å holde eksemplet enkelt velger vi alle bøkene fra bokbok-tabellen. Den vil også vise det resulterende datasettet og et sett med lenker for å spesifisere søkekriteriene.

I ekte applikasjoner, etter å ha klikket på slike lenker, vil alle fasettfiltre justeres til grenseverdiene til det resulterende datasettet. Brukeren vil dermed kunne legge til nye søkebetingelser sekvensielt, for eksempel først velge produsent, deretter spesifisere prisklasse osv.

Men i dette eksemplet vil vi ikke implementere denne virkemåten - alle filtre vil gjenspeile grenseverdiene til det opprinnelige datasettet. Dette er den første begrensningen og den første kandidaten til forbedring i vår demo.

Som du kan se i koden ovenfor, er de faktiske funksjonene plassert i en annen fil kalt pinqDemo.php. La oss ta en titt på den tilsvarende koden som gir den fasetterte søkefunksjonen.

Aspektklasse

Det første trinnet er å lage en klasse som representerer et aspekt. Generelt bør et aspekt inneholde flere egenskaper:

  • Dataene den opererer på ( $data)
  • Nøkkelen som grupperingen utføres med ( $nøkkel)
  • Nøkkeltype ($type). Kan være ett av følgende:
    • spesifiser hele strengen for et eksakt samsvar
    • angi en del av strengen (vanligvis den første) for å søke etter mønster
    • angi et verdiområde for gruppering etter område
  • hvis nøkkeltypen er et verdiområde, må du definere et verditrinn for å bestemme de nedre og øvre grensene for området; eller hvis typen er en del av en streng, må du spesifisere hvor mange første bokstaver som skal brukes for gruppering ($range)

Gruppering- den mest kritiske delen av aspektet. All aggregert informasjon som et aspekt kan returnere avhenger av grupperingskriteriene. Vanligvis er de mest brukte søkeordene " Hel linje", "Del av en streng" eller "Verdiområde".

Navneområde classFacet ( bruk Pinq\ITraversable, Pinq\Traversable; class Facet ( public $data; // Originaldatasett offentlig $key; // felt for å gruppere offentlig $type; // F: hele raden; S: startstrenger ; R: range; public $range; // spiller bare en rolle hvis $type != F ... offentlig funksjon getFacet() ( $filter = ""; if ($this->type == "F") / / hele linjen ( ... ) elseif ($this->type == "S") // starten på linjen ( ... ) elseif ($this->type == "R") // verdiområde ​​( $ filter = $this->data ->groupBy(function($row) ( return floor($row[$this->key] / $this->range) * $this->range; )) -> select(funksjon (ITraversable $data) (retur ["key" => $data->last()[$this->key], "count" => $data->count()]; )); ) returner $filter;)))

Hovedfunksjonen til denne klassen er å returnere et filtrert datasett basert på det opprinnelige datasettet og aspektegenskaper. Fra koden er det klart at for forskjellige typer kontoer brukes ulike måter gruppere data. I koden ovenfor viste vi hvordan koden kan se ut hvis vi grupperer dataene etter en rekke verdier i trinn spesifisert i $range.

Sette aspekter og vise kildedata

Offentlig funksjon test2($app, $data) ( $facet = $this->getFacet($data); return $app["twig"]->render("demo2.html.twig", array("facet" = > $facet, "data" => $data)); ) privat funksjon getFacet($originalData) ( $facet = array(); $data = \Pinq\Traversable::from($originalData); // 3 eksempler på opprettelse forskjellige aspektobjekter, og returner aspektene $filter1 = new \classFacet\Facet($data, "author", "F"); $filter2 = new \classFacet\Facet($data, "title", "S", 6 ); $filter3 = new \classFacet\Facet($data, "price", "R", 10); $facet[$filter1->key] = $filter1->getFacet(); $facet[$filter2-> key ] = $filter2->getFacet(); $facet[$filter3->key] = $filter3->getFacet(); return $facet; )

I getFacet()-metoden gjør vi følgende:

  • Konverter de originale dataene til et Pinq\Traversable-objekt for videre behandling
  • Vi lager tre aspekter. 'Forfatter'-aspektet vil gruppere etter forfatterfeltet, og implementere gruppering etter hele raden; aspekt 'tittel' - etter tittelfeltet med gruppering etter del av linjen (etter de første 6 tegnene); aspekt 'pris' - etter prisfeltet med gruppering etter område (i trinn på 10)
  • Til slutt trekker vi ut aspektene og returnerer dem til test2-funksjonen slik at de kan sendes ut til malen for visning

Utdataaspekter og filtrerte data

I de fleste tilfeller vil filtre vises som en linje, og vil lede deg til å se det filtrerte resultatet.

Vi har allerede opprettet en rute ("demo2/facet/(nøkkel)/(verdi)") for å vise fasetterte søkeresultater og filtrere lenker.

Ruten tar to parametere, avhengig av nøkkelen som filtreres etter og verdien for den nøkkelen. Test3-funksjonen som er bundet til denne ruten er vist nedenfor:

Offentlig funksjonstest3($app, $originalData, $key, $value) ($data = \Pinq\Traversable::from($originalData); $facet = $this->getFacet($data); $filter = null; if ($key == "author") ( $filter = $data ->hvor(function($row) use ($value) (return $row["author"] == $value; )) ->orderByAscending( function($row) bruk ($key) ( return $row["price"]; )) ; ) elseif ($key == "price") ( ... ) else //$key== tittel ( .. . ) returner $app["kvist"]->render("demo2.html.twig", array("facet" => $facet, "data" => $filter)); )

I utgangspunktet, avhengig av nøkkelen, bruker vi filtrering ( anonym funksjon i where-uttrykket), i henhold til den beståtte verdien, og vi får følgende sett med filtrerte data. Vi kan også angi rekkefølgen på datafiltreringen.

Til slutt viser vi rådataene (sammen med filtre) i malen. Denne ruten bruker det samme mønsteret som vi brukte i "demo2".

Søkelinje

    (% for k, v i fasett %)
  • ((k|store bokstaver))
    • (% for vv i v %)
    • ((vv.telling))((vv.nøkkel))
    • (%endfor%)
    (%endfor%)

Vi må huske at aspektene som genereres av applikasjonen vår, er nestede matriser. På det første nivået er dette en rekke av alle aspekter, og i vårt tilfelle er det tre av dem (for forfatter, tittel, pris, henholdsvis).

Hvert aspekt har en nøkkelverdi-matrise, så vi kan iterere over den ved å bruke vanlige metoder.

Legg merke til hvordan vi bygger nettadressene for lenkene våre. Vi bruker både den ytre sløyfetasten (k) og den indre sløyfetasten (vv.key) som parametere for ruten ("demo2/facet/(nøkkel)/(verdi)"). Størrelsen på arrayene (vv.count) brukes for visning i malen.

Det første bildet viser det originale datasettet, og det andre bildet er filtrert etter prisklasse fra $0 til $10, og sortert etter forfatter.

Flott, vi var i stand til å simulere fasettert søk i applikasjonen vår!

Før vi avslutter denne artikkelen, må vi ta en siste titt på eksemplet vårt og finne ut hva som kan forbedres og hvilke begrensninger vi har.

Mulige forbedringer

Generelt er dette et veldig grunnleggende eksempel. Vi har nettopp gått gjennom den grunnleggende syntaksen og konseptene og implementert dem som et fungerende eksempel. Som tidligere nevnt har vi flere områder som kan forbedres for større fleksibilitet.

Vi må implementere "overlegg" søkekriterier, siden det gjeldende eksemplet begrenser oss til muligheten til å bruke søkefiltrering kun på det originale datasettet; vi kan ikke bruke fasettert søk på et allerede filtrert resultat. Dette er den største forbedringen jeg kan forestille meg.

Begrensninger

Fasettsøket implementert i denne artikkelen har alvorlige begrensninger (som også kan gjelde andre fasettsøkimplementeringer):

Vi henter data fra MySQL hver gang

Denne applikasjonen bruker Silex-rammeverket. Som ethvert enkelt inngangspunktrammeverk som Silex, Symfony, Laravel, kalles dens index.php (eller app.php)-fil hver gang en rute analyseres og kontrollerfunksjoner utføres.

Hvis du ser på koden i vår index.php, vil du legge merke til at følgende kodelinje:

$demo = ny pinqDemo\Demo($app);

kalles opp hver gang applikasjonssiden gjengis, noe som betyr at følgende linjer med kode kjøres hver gang:

Klassedemo ( private $books = ""; offentlig funksjon __construct($app) ( $sql = "velg * fra book_book-bestilling etter id"; $this->books = $app["db"]->fetchAll($sql ); )

Blir det bedre om vi ikke bruker et rammeverk? Vel, til tross for at det ikke er en god idé å utvikle applikasjoner uten rammeverk, kan jeg si at vi vil møte de samme problemene: data (og tilstand) lagres ikke mellom forskjellige HTTP-forespørsler. Dette er en grunnleggende egenskap ved HTTP. Dette kan unngås ved å bruke hurtigbuffermekanismer.

Vi reddet noen SQL-spørringer ved hjelp av aspekter. I stedet for å bestå en velg forespørsel for å prøve dataene, og tre grupper etter spørringer med tilsvarende where-betingelser, utførte vi bare ett where-søk, og brukte PINQ for å få den aggregerte informasjonen.

Konklusjon

I denne delen implementerte vi muligheten til å fasettersøke en samling bøker. Dette er som sagt bare et lite eksempel, som har rom for forbedring, og som har en del begrensninger.

Vi slapp ny bok"Innholdsmarkedsføring i i sosiale nettverk: Hvordan komme inn i abonnentenes hoder og få dem til å bli forelsket i merkevaren din.»

Abonnere

Fasettnavigering er et problem for alle e-handelssider. For stort antall sider som brukes til ulike alternativer av samme element utgjør en trussel mot søkeeffektiviteten. Dette kan negativt påvirke SEO og Brukererfaring. Eksperter fra SEO Hacker-bloggen forklarte hva fasettert navigasjon er og hvordan man kan forbedre den.

Fasettnavigering: Definisjon

Denne typen navigasjon finnes vanligvis i sidefeltene på nettsteder. e-handel, inneholder filtre og fasetter - parametere som brukeren konfigurerer etter ønske. lar nettbutikkkunder søke etter produktet de ønsker ved å bruke en kombinasjon av attributter som vil filtrere produktene til brukerne finner det de trenger.

Fasetter og filtre er forskjellige fra hverandre. Her er forskjellen:

  • Fasetter er indekserte kategorier. De hjelper til med å avgrense produktoppføringer og fungerer som utvidelser av kjernekategorier. Fasetter legges til unik verdi for hvert valg brukeren gjør. Siden fasetter er indeksert, må de sende relevante signaler til søkemotoren, for å sikre at siden inneholder alle viktige attributter.

  • Filtre brukes til å sortere og avgrense elementer i lister. De er nødvendige for brukere, men ikke for søkemotorer. Filtre blir ikke indeksert fordi de ikke endrer innholdet på siden, men bare sorterer den i en annen rekkefølge. Dette resulterer i at flere nettadresser har duplisert innhold.

Potensielle problemer

Hver mulig fasettkombinasjon har sin egen unike URL. Det kan forårsake noen problemer fra et SEO-perspektiv. Her er de viktigste:

  • Duplisert innhold.
  • Sløsing med budsjett på skanning.
  • Eliminer koblingsforskjeller.

Ettersom nettstedet ditt vokser, øker også antallet dupliserte sider. Innkommende lenker kan gå til ulike dupliserte sider. Dette reduserer verdien av lenker og begrenser mulighetene for sider til å rangere.

Sannsynligheten for søkeordkannibalisering øker også. Flere sider prøver å rangere for de samme søkeordene, noe som resulterer i mindre konsistente og lavere rangeringer. Dette problemet kan unngås hvis hvert søkeord kun var målrettet mot én enkelt side.

Fasetterte navigasjonsløsninger

Når du velger en løsning for fasettert navigering, bør du vurdere sluttmålet ditt: øke antall sider du indekserer eller redusere antall sider du ikke vil ha indeksert. Her er noen løsninger som kan være nyttige for deg:

AJAX

Hvis du bruker AJAX, opprettes ikke en ny URL når brukeren klikker på en fasett eller et filter. Siden det ikke vil være unike URL-er for alle mulige fasetterkombinasjoner, er problemet med duplikatinnhold, søkeordkannibalisering og bortkastede indekseringskostnader potensielt eliminert.

AJAX kan bare være effektiv før e-handelssiden er lansert. Det brukes ikke til å løse problemer med eksisterende ressurser. Denne metoden krever også visse utgifter fra din side.

noindex-tag

Noindex-koden brukes til å ekskludere roboter spesifikk side fra indeksen. På denne måten vil det ikke vises i resultatene. Google søk. Dette bidrar til å redusere mengden duplikatinnhold som vises i indeksen og søkeresultatene.

Dette løser ikke gjennomsøkingsbudsjettproblemet fordi roboter fortsatt vil besøke siden din. Det hjelper heller ikke å fordele verdien av lenkene.

rel=kanonisk attributt

Med dette attributtet forteller du Google at du har én foretrukket hovedside å indeksere og rangere, og alle andre versjoner av innhold fra den siden er bare duplikater som ikke trenger å indekseres.

Sofia Ibragimova

Innholdsmarkedsfører

Hvis den samme siden på nettstedet ditt kan nås fra flere nettadresser, vil søkeroboter behandle hver nettadresse som egen side. Bots vil bestemme at innholdet på nettstedet ditt ikke er unikt, og dette vil påvirke rangeringen negativt og redusere plasseringen din i søkeresultatene. For å unngå dette, spesifiser den kanoniske hovedsiden ved å sette inn følgende sekvens av tegn i HEAD-blokken:

du kan bruke kanoniske sider, for å løse problemet med duplisert innhold, og delingslenken vil bli slått sammen med hovedsiden din. Men det er en sjanse for at roboter fortsatt vil gjennomsøke dupliserte sider, noe som er bortkastet budsjett.

Robots.txt

Blokkering av enkelte sider fra indeksering lar deg oppnå gode resultater. Det er enkelt, raskt og pålitelig måte. Den enkleste måten å gjøre dette på er å angi et tilpasset alternativ for å spesifisere alle mulige kombinasjoner av fasetter og filtre som du vil blokkere. Inkluder den på slutten av hver URL du vil skjule (http://fullsideadresse/robots.txt) eller bruk Robots-metakoden i HEAD-området i sidekoden.

Når du gjør endringer i nettadressen, husk at det tar 3–4 uker før roboter legger merke til og reagerer på disse endringene.

Det er også visse problemer. Verdien av lenker vil være begrenset, og en blokkert URL kan bli indeksert på grunn av tilstedeværelsen av eksterne lenker.

Google Search Console

Dette er en fin måte å midlertidig fikse problemene mens du jobber med å lage et bedre og mer brukervennlig navigasjonssystem. Du kan bruke konsollen Google søk for å fortelle søkemotoren hvordan den skal gjennomsøke nettstedet ditt.

  • Logg inn regnskap konsollen og velg "Gjennomsøk"-delen:

  • Angi hvilken innvirkning hver av innstillingene dine vil ha på siden og hvordan du vil at Google skal behandle disse sidene.

Husk at denne metoden bare skjuler duplikatinnhold fra søkeroboter Google. Sider vil fortsatt vises i Bing og Yahoo.

Hvordan forbedre fasettert navigasjon

La oss kort vurdere alle metodene som lar deg lage den riktige fasetterte navigasjonen:

  • Bruker AJAX
  • Fjern eller skjul koblinger til kategorier eller filtrer sider som mangler innhold.
  • Tillat indeksering av visse kombinasjoner av fasetter som har høyt volum av søketrafikk
  • Sette opp et nettstedshierarki via brødsmuler i kategorier og underkategorier.
  • Opprette kanoniske (hoved)sider for duplisert innhold.
  • Konsolider indekseringsegenskaper fra komponentsider på tvers av hele serien ved å bruke sidemarkering med rel="next" og rel="prev" .

Konklusjon

Hver av de nevnte løsningene har sine egne fordeler og ulemper. Universell løsning ikke eksisterer, alt avhenger av spesifikasjonene til virksomheten din og den spesifikke saken. Optimalisert fasettert navigasjon vil tillate nettstedet ditt å målrette mot et bredere spekter av søkeord. For å unngå risiko, sørg for at navigasjonen ikke bare oppfyller kravene til søkeroboter, men også gir en god brukeropplevelse.

Innhold i artiklene:
Forrige artikkel:

Fasetter er definerte begrensninger på XDTO-verditypen. En fasett definerer begrensningstypen og begrensningsverdien. For eksempel [Maksimum inklusive - 5]. XDTO-verditypen kan lagre flere fasetter, men typene deres må være unike, det vil si at du ikke kan spesifisere to fasetter [Maksimum inklusive - 5] og [Maksimum inkludert - 3].

I denne artikkelen vil jeg vise hvordan du kan bruke fasetter for å sjekke innganger og hvordan du lager en ws-operasjonsparameter av en sammensatt type.

La oss sette enkel oppgave- last opp varer via en webtjeneste. Vi laster opp kode, navn, pris og saldo i butikken. Men katalogen kan være veldig stor, så når du kaller ws-operasjonen bør det være mulig å angi valget. Vi velger etter varekode.

La oss skape ny base og legg til ny pakke XDTO, la oss kalle det PackageXDTO, angi navneområdet.

Deretter legger du til en verditype til pakken som vist i figuren.


La oss lage en "kode"-type for å organisere utvalget etter unik identifikator nomenklatur. Henholdsvis ny type"Koden" kan avledes fra strengtypen ved å legge til en tegngrense. Det skal være 9 tegn, det vil si antall tegn i nomenklaturkoden. For "mellomromstegn"-fasetten, sett verdien til "skjul", dette vil vise en feil hvis det er mellomrom i koden.


La oss nå lage verditypen "Pris" på samme måte. For det vil vi sette minimum til 0, maksimum til 1.000.000.


For å løse problemet vil vi lage en referansebok for nomenklatur; vi vil lagre resten i en av detaljene - dette er ikke viktig.


Vel, la oss nå begynne å lage en nettjeneste. La oss kalle det "Remains" og legge til 3 parametere:
  • Kode er kodetypen vi har laget tidligere. Av denne parameteren Vi vil etablere utvalg basert på varekode;
  • PrisFra - type Pris. Dette er den nedre grensen for prisen på et produkt;
  • PrisFør - type Pris. Dette er den øvre grensen for prisen på et produkt.

For at webtjenesten skal vise en rekke produkter, som hver har en kode, navn, pris og balanse, la oss lage et XDTO "Nomenclature"-objekt der vi spesifiserer feltene:

  • Kode - type Kode;
  • Navn - strengtype;
  • Pris - type Pris;
  • Resten - skriv int

Og la oss lage et XDTO-objekt "Produkter", som vil ha en egenskap "Nomenklatur", men med muligheten til å vise det som en liste. For typen "Vare"-feltet til "Produkter"-objektet, spesifiser "Nomenklatur"-objektet. Du kan lese mer om hvordan du sender en array gjennom en webtjeneste.

La oss gå videre til egenskapene til "Remains"-operasjonen. La oss spesifisere returverditypen - "Produkter" og åpne modulen. La oss skrive følgende kode:

Funksjon gjenstår (kode, pris fra, pris til)

Request = Ny forespørsel;
Be om . Tekst =
"VELGE
|Nomenklatur.kode,
|Nomenclature.Name,
|Nomenklatur.Pris,
|Nomenklatur.Resten
|FRA
|Directory.Nomenclature AS Nomenclature
|HVOR
|1 = 1
|Og 2 = 2" ;

HvisVerdifylt(Kode)
OG Kode<>"000000000" Så
Be om . Text = StrReplace(Query . Text , " 1 = 1 " , " Nomenclature.Code = &Kode" );
Be om . SetParameter("Kode", Kode);
slutt om;

Hvis ikke PrisFra = PrisTil Da
Be om . Text = StrReplace (Query . Text , "2 = 2" , "Nomenklatur. Pris MELLOM &PrisFra OG &PrisTil");
Be om . SetParameter("PriceDo", PriceDo);
Be om . SetParameter("PrisFrom", PrisFra);
slutt om;

Søkeresultat= Forespørsel. Løpe();

SelectionDetailed Records= Søkeresultat. Velg ();
TypeXDTOProducts = FactoryXDTO . Type(, "Produkter");

Produkter = FactoryXDTO . Create(TypeXDTOProducts);
TypeXDTONomenklatur= FactoryXDTO . Type ( "http://codenotes-1c.blogspot.ru/", "Nomenklatur" );
Ha detSelectionDetailed Records. Neste() Loop
Vare = FactoryXDTO . Skape ( TypeXDTONomenklatur);
Nomenklatur. Kode =SelectionDetailed Records. Kode ;
Nomenklatur. Navn =SelectionDetailed Records. Navn ;
Nomenklatur. Pris =SelectionDetailed Records. Pris ;
Nomenklatur. Resten =SelectionDetailed Records. Resten ;
Varer. Nomenklatur. Add(Nomenklatur);
EndCycle ;

Komme tilbake Varer ;

EndFunction

For å demonstrere funksjonen til fasetter er det ikke nødvendig å se på selve koden; nå er det viktig å sjekke det uten å kode begrensningene på inndataparametere de er tilstede på grunn av fasettene.
For å gjøre dette kaller vi ws-operasjonen med forskjellige parametere:

  • uten parametere. For å være presis vil vi indikere koden "000000000", prisen fra =0, ​​prisen til = 0. Fordi tomme parametere er uakseptable.

Vel, vi vil indikere denne typen for "Code" -parameteren til ws-operasjonen "Remains". Deretter vil vi kunne angi varekoden både som et tall og som en streng. Uten å endre koden kan vi bare spesifisere 0, som tilsvarer en tom parameterverdi, og valget vil ikke bli installert.

Og det er kult. Tross alt, hvis vi kan lage begrensninger på inndata i kode, uten å bruke fasetter, da kompositt type data kan ikke gjøres på denne måten. Dette gir rikelige muligheter ved utvikling av webtjenester.

Deretter, for referanse, vil jeg gi verdien av hvert eiendomsfelt. Denne beskrivelsen hentet fra lenken: Hva refererer konseptet «Facet» til innenfor XDTO-modellen? Hva er en fasett? Tusen takk til forfatterne!

  • Basistype - en type som brukes som grunnlag. Standard er AnyType. Det tillatte settet med fasetter avhenger av denne verdien.
  • Lengde - lengde fasett. Inneholder antall lengdeenheter, hvor lengdeenheten har forskjellig betydning for ulike typer. For typene "streng" og "anyURI" inneholder lengden antall tegn. For typene "hexBinary" og "base64Binary" inneholder lengden antall byte med binære data. For listedefinerte typer inneholder lengden antall elementer i listen;
  • MaxInclusive – Den maksimale fasetten som inkluderer grensen. Begrenser verdiområdet av denne typen maksimal verdi. Enhver verdi av denne typen er mindre enn eller lik den angitte verdien;
  • MaxLength – fasett av maksimal lengde. Inneholder maksimalt beløp lengdeenheter, hvor lengdeenheten har forskjellig betydning for forskjellige typer. For skriv "streng" maksimal lengde inneholder maksimalt antall tegn. For typene "hexBinary" og "base64Binary" inneholder maksimal lengde det maksimale antallet byte med binære data. For listedefinerte typer inneholder maksimal lengde maksimalt antall listeelementer;
  • MaxExclusive er en maksimal fasett som ikke inkluderer en grense. Begrenser verdiområdet for en gitt type til maksimumsverdien. Enhver verdi av denne typen er mindre enn den angitte verdien;
  • MinInklusive - fasett av minimum som inkluderer grensen. Begrenser verdiområdet til en gitt type minimumsverdi. Enhver verdi av denne typen er større enn eller lik den angitte verdien;
  • MinLength – fasett med minimal lengde. Inneholder et minimum antall lengdeenheter, med en lengdeenhet som har ulik betydning for ulike typer. For "streng"-typen inneholder minimumslengden minimum antall tegn. For typene "hexBinary" og "base64Binary" inneholder minimumslengden minimum antall byte med binære data. For listedefinerte typer inneholder minimumslengden minimum antall listeelementer;
  • MinExclusive – en fasett av et minimum som ikke inkluderer en grense. Begrenser verdiområdet for en gitt type til en minimumsverdi. Enhver verdi av denne typen er større enn den angitte verdien;
  • Oppregning er en oppregningsfasett. Definerer et sett akseptable verdier av denne typen;
  • Whitespace Characters - fasett mellomromstegn. Kan ta en av tre verdier:
    • Lagre - strengen kan inneholde alle mellomromstegn;
    • Erstatt - Linjen må ikke inneholde #x9 (tab), #xA (linjemating) og #xD (vognretur). Hvis de finnes, må de erstattes med tegnet #x20 (mellomrom);
    • Skjul – I tillegg til kravene spesifisert for erstatningsverdien, må strengen ikke inneholde sammenkoblede #x20 (mellomrom) tegn eller innledende eller etterfølgende #x20 (mellomrom) tegn;
  • DigitsTotal - fasett av det totale antallet sifre. Inneholder det totale antallet sifre i et tall ( hele delen pluss brøkdel);
  • FractionalPartDigits - fasett av antall sifre i brøkdelen. Inneholder antall sifre i brøkdelen av tallet.

Tatyana Starkova

Leksjonsvansker:

Nivå 3 - middels vanskelighetsgrad. Det krever oppmerksomhet og litt omtanke.

Ikke tilgjengelig i utgaver:

Ingen restriksjoner

I moderne verden hvert sekund er verdifullt. Folk prøver å bruke mindre og mindre tid på shopping. Langsomme produktkataloger driver folk bort, butikken mister kunder og deler av overskuddet. Du på sin side gjør ikke slike feil, gjør nettbutikken din attraktiv sammen med teknologi fasettert Fasettert – dvs. forhåndsdefinert Søk. Skape fasetterte indekser Fasettindeks- dette er klart søkesett varer etter en viss eiendomsverdi. og øker ikke bare søket etter produkter betydelig, men også arbeidet med hele katalogen som helhet.

Merk: fasettert søk tilgjengelig fra modulversjon 15.0.1 Informasjonsblokker.

Litt "kjedelig teori" om fasettert søk

Systemet genererer fasetter på forhånd (alle mulige kombinasjoner av skjæringspunkt mellom produktegenskaper) og ved utførelse søkeord Resultatet vises umiddelbart - disse ferdige fasettene. Den fasetterte søkemekanismen er innebygd i informasjonsblokker og integrert med komponent Komponent- Dette programkode, designet i et visuelt skall, utfører en viss funksjon hvilken som helst modul for å vise data i den offentlige delen. Vi kan sette inn denne kodeblokken på nettsider uten å skrive noen kode direkte. Smart filter Komponenten forbereder et filter for å velge fra informasjonsblokken og viser et filterskjema for filtrering av elementer. Komponenten må kobles til før komponenten for å vise katalogelementer, ellers vil ikke listen over elementer filtreres. Komponenten er standard, inkludert i moduldistribusjonen og inneholder tre maler: .misligholde, visuell_horisontal Og visual_vertical. (De to siste malene støttes ikke, de gjenstår for å opprettholde kompatibiliteten.)

I visuell redaktør komponenten er plassert langs banen Innhold > Katalog > Smartfilter.

Komponenten tilhører modulen Informasjonsblokker.

Å sette opp fasetterte søk innebærer å lage fasetterte indekser og gjøres i noen få enkle trinn:


De opprettede fasettindeksene lagres i databasen, og i tabellen for produktkataloger i kolonnen Stat vises Virker:

Merk: For tilbudskatalogen opprettes fasetterte indekser når indekser opprettes for hovedkatalogen.

Fasettsøk forbedrer ytelsen til produktkatalogen. For å bruke den trenger du:

  1. lage fasetterte indekser for en produktkatalog;
  2. Se etter varsler om behovet for å gjenskape indekser.

Organiserer det såkalte fasetterte søket (fasettert navigasjon) på nettstedet. Betydningen er at søkeresultater kan avgrenses ved hjelp av ulike egenskaper materiale - forfatter, type, term, dato for opprettelse, etc.

For eksempel hvis du har en nettbutikk som selger elektronisk utstyr, og brukeren skriver inn uttrykket lydspiller. På resultatsiden vil det i tillegg til selve resultatene være fasetter:

- Kapittel: lydutstyr (54), datateknologi (85)
- Merke: Apple (25), Samsung (68), iRiver (78)
- Tilgjengelighet: På lager: ja (456), nei (12)
- Pris: 100-1000$ (45), 1000-10000$ (12)

etc. Antall produkter (noder) som oppfyller disse egenskapene vil bli angitt i parentes. Ved å klikke på lenkene vil brukeren begrense søkeresultatene.


På den ene siden er dette et alternativ til utvidede filtre i Views, på den andre et alternativ til standard avansert søk.

Installasjon

Fasettseksjon

I denne delen kan du spesifisere hvilke fasetter du skal bruke når du søker. La deg for eksempel velge materialer etter taksonomi, dato lagt til eller forfatter. Antall fasetter avhenger av de inkluderte modulene.

Resultatsideseksjonen

Vis stil- visningsstil for søkeresultater: Ekstrakter betyr å vise som i et vanlig søk (uthevet tekst, forfatter, dato); Teasere betyr å vise teasere av materialer ved å bruke riktig node.tpl.php.

Bruk visningsstilen for ekstrakter selektivt- Hvis alternativet er merket, så stilen Ekstrakter vil alltid bli brukt hvis et nøkkelord er angitt. Hvis du ikke merker av for dette alternativet, kan du bruke modulen som en erstatning for å navigere i taksonomitermer.

Gjeldende søkeseksjon

Lar deg slå på blokken Gjeldende søk, som viser søkeordene: