webForumDet fria alternativet

Spara läge av visad/dold div

4 svar · 600 visningar · startad av dreas

dreasMedlem sedan jan. 2004140 inlägg
#1

Hej,

Vet inte alls ifall detta hamnar på rätt ställe, i annat fall får moderatorerna gärna placera det korrekt.

Jag kommer ha en sida med ett par lager. Dessa ska gå att visa eller dölja, med att klicka på själva titeln för lagret. Det jag nu vill åstadkomma är att detta läge sparas för nästa besök.

Jag är medvetet om att det finns generellt två vanliga sätt att lösa detta; sessioner och cookies (se länk för de som söker tråd för detta alternativ)
http://www.webforum.nu/showthread.php?t=137882&highlight=Spara+meny

Nu är det så att jag har lite mer krav än det. Om vi tar och jämför med ett relativt välkänt fenomen - Facebook. Här har man lagt upp det så att man kan ju visa/dölja dessa "addon's eller plugins" (som facebook nu är översvämmad med). Finessen är att dessa sparas, oavsett vilken dator man använder - dvs. ingen cookies sparas utan de måste ha löst det så att det skrivs in till databasen.
Tanken som slår mig är att detta borde ju bli sjukt många poster i databasen, för alternativet att dölja/visa tillägget kan man även göra på de man inte själv lagt till på sin profil. För den ej insatta kan jag tillägga - de tillägg finns det extremt många av.

Nu har jag tack och lov inte så många lager att dölja, vilket gör att denna lösning skulle fungera. Men jag vill ändå höra med er ifall det finns något bättre och smidigare sätt att komma fram till samma resultat?

Tack tack!
Andreas

FuelMedlem sedan okt. 20001 285 inlägg
#2

spara hidden/show i en array under usern.. som du tar ut i en session vid inloggning.

user_id: 1
user_name: laban
user_blocks: info,filmer,extra,bilder, etc..

dreasMedlem sedan jan. 2004140 inlägg
#3

Då menar du att man ska spara detta i databasen? Menar du att arrayen ska placeras i databasen?? Dvs.; man lägger in den fiktiva arrayen som en text input i databasen. Har jag förstått dig rätt?
Smart iaf att köra den i session sen, så att man inte behöver anropa databasen hela tiden.

aasahMedlem sedan mars 20034 471 inlägg
#4

dreas skrev:

Då menar du att man ska spara detta i databasen? Menar du att arrayen ska placeras i databasen?? Dvs.; man lägger in den fiktiva arrayen som en text input i databasen. Har jag förstått dig rätt?
Smart iaf att köra den i session sen, så att man inte behöver anropa databasen hela tiden.

Jag hade använt bitprogrammering i kombination med databas och sessioner.

Säg (till att börja med) att du har högst 32 lager att visa/dölja.
En int har 32 binära siffror (bitar). Du numrerar dina lager i databasen, genom att lagra info om dem i en egen tabell, på följande sätt:

Lager ((platsnr) namn, innehåll) <--- eller vad du nu vill dock minst platsnr och namn

Varje platsnummer är ett heltal mellan 0 och 31 (inklusive) vilka motsvarar en jämn potens av 2. 2^0=1, 2^1=2, 2^2=4, 2^3=8, .... (där den "blå" siffran motsvarar platsnr).

I medlemstabellen har du ett int-fält som heter MemberLager. Där lagrar du ett heltal som motsvarar vilka lager just denna medlem vill se på följande vis:

Låt oss säga att Anna vill se lager 0, 4 och 20. Då slår du "på" just dessa bitar:

Kolumnen MemberLager sätts till värdet: 2^0 | 2^4 | 2^20
(OBS! bitwise OR EJ logiskt OR)

När Anna loggar in sätts $_SESSION['s_Lager'] = heltalet från MemberLager.

Sedan kan varje lager kolla om det syns genom att kolla sitt platsnummer enl:

if ((2^platsnr & $_SESSION['s_Lager']) == 1) $visible = TRUE;
else $visible = FALSE;

Om du har mer än 32 lager, kan du antingen använda en bigint eller två, tre, ... intar.
Om du väljer att lagra det i n st intar, får du n st SESSION-variabler som hör till lager, och n st MemberLager-kolumner. Däremot kan du fortsätta med en Lager-tabell om du justerar nyckeln till:
((platsnr, intNr) namn, info)
Dvs du får peka ut vilken kolumn/sessionsvar som hör ihop med värdet.

Men även om du har 7 st intar (32^7 lager) tar det mindre plats än en text-baserad lösning.

dreasMedlem sedan jan. 2004140 inlägg
#5

aasah: Mycket intressant och genialisk lösning som, när man tänker på det, blir så självklart. Nu har jag inte helt greppat det här med potenser och hur det egentligen rör sig i de binära siffrorna, men jag får läsa din post ett par gånger till samt undersöka lite ytterligare källor. Men som vanligt med svar från dig - briljant, tack! :)

419 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
415 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)