Az 1C-bites fejlesztők - a minősítések létrehozzák saját rangsorolási feltételeit
Míg a "Ratings" dokumentációja fejlesztés alatt áll, meg szeretném mutatni egy példát a saját minősítési kritériumom megvalósításáról.
Először is megmondom, hogy mi a minősítés és hogyan számítják ki.
A minősítés olyan kritériumokból álló becslés, mint például "felhasználói üzenetek szavazása" vagy "tevékenység a fórumon".
Minden kritérium az eredmények alapján saját logikát használ. Ennek a megközelítésnek köszönhetően bármilyen képletet megvalósíthatunk.
Értékelés kritériumai és képletek
Amikor a kritériumok eredményeit kiszámítjuk, kiszámítjuk a végeredményt.
Ez akár kritériumok összege, akár átlagérték lehet.
Most lépjünk tovább a minősítési kritérium létrehozásához.
Hozzon létre például egy új kritériumot: "A szavazó a felhasználó számára".
A modulok fórumán és blogján más szempontokat is láthat.
A kritérium létrehozása három szakaszból áll:
1. Hozzon létre egy osztályt és regisztrálja az eseményeket;
2. Konfigurálja a kritériumokat és írja le a számítási funkciókat;
3. Adja hozzá a minősítési szavazás összetevőit a kód megfelelő részeihez;
Hozzon létre egy osztályt és regisztrálja az eseményeket.
A minősítési kritérium fájl létrehozása
A modul gyökerén ezt az osztályt be kell illeszteni az include.php fájlba.
A függvény a $ arConfigs tömbhöz tartozik. amelyben van adat a minősítésről és a kritérium beállításairól.
A számlálás előtt el kell végeznie a CRatings :: AddComponentResults ($ arConfigs) funkciót; és törölje az összes régi számítást.
Ezután írja a számítási logikát, és adja hozzá az eredményt a b_rating_component_results táblához
A RATING_ID a minősítési azonosító.
MODULE_ID - annak a modulnak az azonosítója, amelyre számít.
A szavazás típusa a RATING_TYPE.
NAME a kritérium azonosítója.
A (z) COMPLEX_NAME a kritérium összetett azonosítója.
ENTITY_TYPE_ID - Az értékelő objektum.
ENTITY_ID az értékelő objektum azonosítója, esetünkben a felhasználói azonosító.
CURRENT_VALUE - az adott ENTITY_ID kritériumának kiszámításának eredménye, esetünkben ez az összes felhasználó szavazat összege, megszorozva a minősítési beállításban megadott együtthatóval.
Az eredmények hozzáadásakor javaslom az INSERT ... SELECT konstrukció használatát a projektterhelés minimalizálásához a minősítés újraszámításakor. A tevékenység számlálásának példáján (nagyszámú bejegyzéssel) a program használata a számlálási időt 30-ról 0,6 másodpercre csökkentette!
funkció OnGetRatingObject
A funkció elérhető objektumokat ad a minősítéshez
Valószínűleg a jövőbeni frissítésekben ez a funkció átkerül az CRatalitási osztályba.
funkció OnAfterAddRating
funkció OnAfterUpdateRating
Ezekben a funkciókban a bevitt adatok (a konfigurációs tömbben megadott mezők) felhasználói bevitele hívásra kerül, a minősítés hozzáadásakor és szerkesztésénél fogva működik.
funkció __CheckFields
A felhasználói bevitel ellenőrzése (a konfigurációs tömbben megadott mezők) a minősítés mentése vagy szerkesztése közben.
Itt ellenőriznie kell a kritériumok által használt összes mezőt.
függvény __AssembleConfigDefault
Segédfunkció, amely összegyűjti az alapértelmezett értékeket a konfigurációs tömb által megadott mezőkre.
Valószínűleg a jövőbeni frissítésekben ez a funkció átkerül az CRatalitási osztályba.
Adja hozzá a "szavazó szavazat" összetevőjét (bitrix: rating.vote)
Minden olyan helyen, ahol szavazási szavazást szeretne megjeleníteni, hozzá kell adnia egy hívást a bitrix összetevőhöz: rating.vote.
A bitrix: rating.vote komponens kétféleképpen működik:
1. Automatikusan fogadja az adatokat - egy hívásra, például egy felhasználói kártyára van szükség.
2. Adatot kell küldenie az összetevőnek - használnia kell több hívásra, például a fórumüzenetekben.
Példaként meg kell adnunk, hogy melyik kódot adjuk hozzá a sablonhoz a komplex fórum összetevőhöz (a .default sablon alapján).
Nyissa meg a fájl fórumát \ sablonok \ (a sablonodat) \ bitrix \ forum.topic.read \ (sablonod) \ template_message.php
Milyen gyakran fordul elő a minősítés?
Jó kérdés, pontosan megmondom, hogy a számítás hogyan történik.
A minősítések számítása két szakaszban történik:
1. A kritériumok eredményeinek számítása logikájuk alapján;
2. A minősítési eredmények kiszámítása a kritériumok kiszámításának eredményei alapján;
A kritériumok eredményeit a REFRESH_TIME érték alapján újraszámolják (egy óra múlva kerekítve).
Például, ha REFRESH_TIME = 3600 értéket állít be - a kritérium kiszámításra kerül óránként, ha REFRESH_TIME = 7000 értéket állít be - minden második órában.
A minősítés eredménye óránként számolódik a "minősítési kritériumok" már számított eredménye alapján. Ha ebben a futtatási kritériumot nem vettük figyelembe, az adatokat az utolsó számításból vettük.
Láttam az ügynököt, az ügynökök listáján, aztán nem rendszeres
Az ügynök rendszeres, minden órában végrehajtja a CRatings :: Calculate (ID-rating) funkciót, amely a következő végrehajtási időt egy óra múlva váltja át.
És még egy dolog:
A minősítés létrehozásakor, szerkesztésénél és minősítésénél az adminisztrációs területről - az összes minősítési kritériumot kötelezően újraszámítjuk, ez azért van így, hogy azonnal láthassuk az eredményt.