Shared Objects / Αποθήκευση δεδομένων στο δίσκο

Λύσεις προβλημάτων για το δημοφιλές πρόγραμμα κατασκευής παρουσιάσεων στο διαδίκτυο.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
spookyb52
Δημοσιεύσεις: 1891
Εγγραφή: 23 Ιαν 2002 01:00
Τοποθεσία: Lost in the mansion
Επικοινωνία:

Shared Objects / Αποθήκευση δεδομένων στο δίσκο

Δημοσίευση από spookyb52 » 01 Ιούλ 2004 15:28

Εισαγωγικά :
ήταν τόση μεγάλη η χαρά μου που βρήκα το χαμένο εδώ και 3 χρόνια cd των purple overdose που αποφάσια να γράψω ένα tutorial!



Γράψτε κάτι στο παραπάνω flash και πατήστε save. Στη συνέχεια κάντε refresh την σελίδα.

Το παραπάνω δέν χρειαζόταν, το έβαλα για να έχει περισσότερα hits το tut μου.

Προσοχή : Ακολουθεί εθιστικό tutorial

Από το flash 6 και μετά υπάρχει η δυνατότητα αποθήκευσης αντικειμένων στον σκληρό δίσκο
Τα αντικείμενα αυτά αποθηκεύονται μέσα σε φακέλους στον κατάλογο

C:\WINDOWS\Application Data\Macromedia\Flash Player\localhost

Το flash αποθηκεύει όπως μπορείτε να δείτε και από την εικόνα παρακάτω μέχρι 100 kb

Εικόνα

ενώ για μεγαλύτερα αρχεία θα σας ζητηθεί να απαντήσετε θετικά η αρνητικά στην αποθήκευσή τους

Τα αντικείμενα μπορεί να είναι αρχεία τύπου sol στα οποία θα αποθηκεύονται μεταβλητές, πίνακες, κείμενα κτλ

Ο φάκελος που δημιουργείτε στην διαδρομή C:\WINDOWS\Application Data\Macromedia\Flash Player\localhost συμπλήρώνεται από την διαδρομή και το όνομα του swf

πχ άν το swf βρίσκεται στην διεύθυνση www.flashmou.gr/folder1/folder2/myflash.swf τότε η διαδρομή για το sol αρχείο θα ήταν

C:\WINDOWS\Application Data\Macromedia\Flash Player\localhost\folder1\folder2\myflash.sol

//------------------------

Άς δούμε πώς μπορεί να γίνει αυτό

Εδώ να πώ ότι μου κόλλησε το mx2004 και επειδή δέν κλέινει, ούτε ανοίγει, άνοιξα και το mx2003

Εικόνα

Βλέπουμε λοιπόν πόσο χρήσιμο είναι να υπάρχουν και τα δύο εγκατεστημένα :PPPP

Μόλις κόλλησε όμως και ο explorer... οπότε restart στο ρημάδι!!!!!! Τα χάπια μου

Εδώ βλέπουμε πόσο χρήσιμο είναι ένα σταθερό λειτουργικό

Επανήλθα :ppp

Τόσο για τη δημιουργία όσο και την ανάκληση δεδομένων κοινόχρηστων αντικειμένων χρησιμοποιούμε την ίδια εντολή, την getLocal, που είναι μέθοδος της κλάσσης SharedObject

SharedObject.getLocal(name, path)

Όπως μπορούμε να δούμε υπάρχουν 2 παράμετροι στην παρένθεση που μπορούμε να συμπληρώσουμε. name & path. Το path είναι προαιρετικό
αλλά το name υποχρεωτικό

name : Το όνομα του sol αρχείου που θα αποθηκευθεί
path : Άν θέλουμε να προσθέσουμε επιπλέον path

Η μαύρη αλήθεια είναι ότι δέν χρησιμοποιούμε ακριβώς έτσι την εντολή αλλά δημιουργούμε μια αναφορά την οποία μπορούμε στη συνέχεια να χρησιμοποιούμε στον κώδικα. Αυτό δέν είναι δύσκολο φυσικά αλλά απλό σάν να θέτουμε μια μεταβλητή σε μιά τιμή.

πχ

shareThis = SharedObject.getLocal("mysol")
Από εδώ και πέρα θα μπορούμε να χρησιμοποιούμε το shareThis για τις βρωμοδουλειές μας!
[τα αντικείμενα δημιοργούνται έτσι και αλλιώς οπότε δέν σπαταλάμε το χρόνο μας με άχρηστες γραμμές κώδικα]

Η αποθήκευση γίνεται με την data χρησιμοποιόντας το όνομα της αναφοράς

πχ
shareThis.data.myVariable = "done";


Άν η διαδρομή του swf ήταν www.site.com/myflash/flash.swf και χρησιμοποιούσαμε την εντολή SharedObject.getLocal("mysol") και με την data αποθηκεύαμε αυτό που θέλαμε τότε το αρχείο θα εδημιουργείτ (ζωφραφίζω σήμερα...) στο path

C:\WINDOWS\Application Data\Macromedia\Flash Player\localhost\myflash\mysol.sol

ενώ άν η εντολή ήταν SharedObject.getLocal("mysol", "/newpath") το path στον σκληρό θα ήταν

C:\WINDOWS\Application Data\Macromedia\Flash Player\localhost\myflash\newpath\mysol.sol

Στην πράξη τωρα

Δημιουργήστε στο C: ένα φάκελο με ονομασία flusher και μέσα βάλτε ένα νέο κενό fla αρχείο με ονομασία loader [οι ονομασίες αυτές δέν έχουν νόημα αλλά με βάση αυτές θα εξηγήσω και τα υπόλοιπα]

Ανοίξτε το loader.fla και ετοιμαστέιτε να γράψουμε λίγο κώδικα

θα βάλουμε την εντολή μέσα σε μιά onLoad συνάρτηση για να μήν δημιουργούμε buttons κτλ

Κώδικας: Επιλογή όλων

onLoad = function () {
	shareThis = SharedObject.getLocal("mysol");
	shareThis.data.myVar = 12;
};
Πατήστε ctrl+enter

Με βάση και τα όσα είπαμε πιό πάνω

Δημιουργουμε το κοινόχρηστο αντικείμενο mysol με ονομασία αναφοράς shareThis
shareThis = SharedObject.getLocal("mysol");
και στη συνέχεια δημιουργούμε και αποθηκεύουμε μιά μεταβλητή με ονομασία myVar με τιμή 12 στο αντικείμενο αυτό
shareThis.data.myVar = 12;

Άν κάνετε search στο C:\WINDOWS\Application Data\Macromedia\Flash Player\localhost για το αρχείο mysol.sol θα το βρείτε. Δημιουργήθηκε όταν τεστάρατε το fla και η διαδρομή του αρχείου με την ονομασία του συμπlηρωμένο απο τον default φάκελο αποθήκευσης
C:\WINDOWS\Application Data\Macromedia\Flash Player\localhost

Δηλαδή για το παραπάνω θα είναι

C:\WINDOWS\Application Data\Macromedia\Flash Player\localhost\flusher\loader.swf\mysol.sol

Εικόνα

Μπορείτε να δημιουργήσετε περισσότερα από ένα κοινόχρηστα αντικείμενα άν και εξαιτίας ...τεχνικών προβλημάτων καλό είναι να μήν το κάνετε

πχ

Κώδικας: Επιλογή όλων

onLoad = function () {
	shareThis = SharedObject.getLocal("mysol");
	shareThis.data.myVar = 12;
                //-----------------------
	shareThat = SharedObject.getLocal("new");
	shareThat.data.newVar = 22;
};

Όπως είπα πρίν μπορούμε να κάνουμε load τις αποθηκευμένες τιμές με την getlocal και την χρήση της data

Στο πρώτο παράδειγμα αφού δημιουργήστε το αντικείμενο και αποθηκεύσετε την μεταβλητή myVar σβήστε τον κώδικα και δώστε τον παρακάτω

Κώδικας: Επιλογή όλων

onLoad = function () {
	shareThis = SharedObject.getLocal("mysol");
	myVarValueWas = shareThis.data.myVar;
	trace(myVarValueWas);
};
Με αυτό τον τρόπο μπορείτε να φορτώσετε τα δεδομένα
Δημιουργούμε μιά νεά μεταβλητή [myVarValueWas ] η τιμή της οποίας είναι ίδια με την αντίστοιχη στη μεταβλητή myVar που είναι αποθηκευμένη στο mysol
Η trace θα εμφανίσει την τιμή αυτή στο output παράθυρο του flash και θα είναι ίση με 12 [ με βάση το παράδειγμα ]

Θα μπορούσαμε να την εμφανίσουμε και απευθείας στο output παράθυρο του flash όπως παρακάτω

shareThis = SharedObject.getLocal("mysol");
trace(shareThis.data.myVar);

Μην ξεχνάτε ότι μπορούμε να αποθηκευσουμε και πίνακες!
shareThis.data.myArray = []

//------------------------------------------------

1) Μπορούμε να αναγκάσουμε ένα κοινόχρηστο αντικείμενο να αποθηκευτεί με την flush()

πχ shareThis.flush();

2) Μπορούμε να διαγράψουμε ένα συγκεκριμένο αντικείμενο με την παρακάτω σύνταξη

shareThis.data.deleteThis = null
έτσι θα διαγράφαμε το deleteThis

3) Μπορούμε να διαγράψουμε τα πάντα με την clear

shareThis.clear()

4) Πάιρνουμε το μέγεθος των δεδομένων με την getSize

shareThis.getSize();

Η onStatus είναι πολυτέλεια οπότε εδώ τελειώνω :p

Thanks στους purp_over που με συντρόφευσαν με τους ήχους τους!
Τελευταία επεξεργασία από το μέλος spookyb52 την 06 Νοέμ 2005 15:58, έχει επεξεργασθεί 1 φορά συνολικά.
Life is like a fast car on an icy road. Brakes don't work, yes I know it, but I step on the gas
Garage punk | Rockabilly | Rock 'n' Roll | Stoner

spookyb52
Δημοσιεύσεις: 1891
Εγγραφή: 23 Ιαν 2002 01:00
Τοποθεσία: Lost in the mansion
Επικοινωνία:

Shared Objects / Αποθήκευση δεδομένων στο δίσκο

Δημοσίευση από spookyb52 » 01 Ιούλ 2004 15:42

Επειδή το ξέχασα κάτι σχετικά, σχετικό...

Άν και οι παραπάνω δυνατότητες υπάρχουν στο flash από την έκδοση 6 [mx2003]

Το mx2003 όχι μόνο δέν χρώμάτιζε τον κώδικα αλλά και δέν ανέφερε τίποτα για αυτές στο help. Και εγώ όταν τις είχα πρωτοδεί θυμάμαι έψαχνα το help και έλεγα που στο καλό είναι όλα αυτά... :roll:
Life is like a fast car on an icy road. Brakes don't work, yes I know it, but I step on the gas
Garage punk | Rockabilly | Rock 'n' Roll | Stoner

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

Shared Objects / Αποθήκευση δεδομένων στο δίσκο

Δημοσίευση από LightForce » 01 Ιούλ 2004 16:14

Mπραβο spooky :-)

..αλλο ενα fla..
http://www.freestuff.gr/forums/viewtopic.php?t=8802

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Shared Objects / Αποθήκευση δεδομένων στο δίσκο

Δημοσίευση από Basilakis » 01 Ιούλ 2004 22:31

Πολύ καλό.... Αν και ομολογό την πάτησα με το αρχικό για το save... Νόμιζα ήτανε παράδειγμα!

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Shared Objects / Αποθήκευση δεδομένων στο δίσκο

Δημοσίευση από Rapid-eraser » 02 Ιούλ 2004 00:52

sav cookie dld apo8ikebete etsi ?
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

Shared Objects / Αποθήκευση δεδομένων στο δίσκο

Δημοσίευση από LightForce » 02 Ιούλ 2004 01:11

ναι rapido :)

Άβαταρ μέλους
HoMESICk_ALIEN
Δημοσιεύσεις: 77
Εγγραφή: 27 Μαρ 2004 16:24

Shared Objects / Αποθήκευση δεδομένων στο δίσκο

Δημοσίευση από HoMESICk_ALIEN » 20 Αύγ 2004 13:26

Ρε παιδιά, σε μια standalone εφαρμογή που κάνω, θέλω να κρατάω high scores με χρήση shared Objects. Όλα καλά μέχρι εδώ, αλλά στα XP, το .sol αρχείο σώζεται σε διαφορετικό μέρος για κάθε χρήστη. Έτσι, αν κάνεις login στο σύστημα με άλλο username, δεν έχω πρόσβαση στο .sol αρχείο του προηγούμενου χρήστη. Μήπως υπάρχει περίπτωση να σώζεται το αρχείο αυτό σε κάποιον φάκελο κοινό για όλους;

Και μήπως ξέρετε πώς αλλιώς μπορώ να κρατάω τα scores με άλλο τρόπο, πέρα από χρήση director ή γλώσσας προγραμματισμού;; (απ'όσο κατάλαβα, δε πρέπει να γίνεται :( )

Άβαταρ μέλους
X-Girl
Honorary Member
Δημοσιεύσεις: 525
Εγγραφή: 04 Οκτ 2003 16:26
Τοποθεσία: Μοσχάτο

Shared Objects / Αποθήκευση δεδομένων στο δίσκο

Δημοσίευση από X-Girl » 20 Αύγ 2004 14:20

Για το δεύτερο που ρωτάς δεν νομίζω να γίνεται με άλλον τρόπο :roll:

Άβαταρ μέλους
HoMESICk_ALIEN
Δημοσιεύσεις: 77
Εγγραφή: 27 Μαρ 2004 16:24

Shared Objects / Αποθήκευση δεδομένων στο δίσκο

Δημοσίευση από HoMESICk_ALIEN » 20 Αύγ 2004 14:47

Και εγώ αυτό βλέπω τώρα. Υπάρχουν λέει προγράμματα (http://www.lpflashex.com/) που κάνουν αυτή τη δουλειά, αλλά δεν έχω το χρόνο (και την όρεξη :P) να ασχοληθώ. Αν ξέρει κάποιος κάτι σχετικά με αυτά, ας μας το πει..

Εγώ με βλέπω να μπλέκω με direcotr :( :hammer:

thanx anyway..



PS. X-Girl έχεις καμία σχέση με την Andromeda που κάνει τα assembly demos??? :o

Άβαταρ μέλους
X-Girl
Honorary Member
Δημοσιεύσεις: 525
Εγγραφή: 04 Οκτ 2003 16:26
Τοποθεσία: Μοσχάτο

Shared Objects / Αποθήκευση δεδομένων στο δίσκο

Δημοσίευση από X-Girl » 20 Αύγ 2004 15:09

Για το lpflashex θα ρωτήσω τον Light..
Αssembly demos , oxi :o :D

Άβαταρ μέλους
HoMESICk_ALIEN
Δημοσιεύσεις: 77
Εγγραφή: 27 Μαρ 2004 16:24

Shared Objects / Αποθήκευση δεδομένων στο δίσκο

Δημοσίευση από HoMESICk_ALIEN » 20 Αύγ 2004 15:38

phew, γιατί αλλιώς θα έπρεπε να κατεβώ στη πρωτεύουσα, να υποκλιθώ και να ξαναγυρίσω!! :)

thanx για τις απαντήσεις

Clarabel
Δημοσιεύσεις: 1
Εγγραφή: 19 Οκτ 2005 15:37

Shared Objects / Αποθήκευση δεδομένων στο δίσκο

Δημοσίευση από Clarabel » 19 Οκτ 2005 15:42

kalispera
na kanw ki egw mia erwtisi panw se auto ?

kai se periptwsi pou den thelw na valw button "save"
kai thelw na valw ena 'checkbox'.... opws p.x. sto login edw sto forum

pws mporw na to kanw sto flash...
exw valei hdh to componet sto form pou thelw....apo ekei kai pera?

thanks!

spookyb52
Δημοσιεύσεις: 1891
Εγγραφή: 23 Ιαν 2002 01:00
Τοποθεσία: Lost in the mansion
Επικοινωνία:

Shared Objects / Αποθήκευση δεδομένων στο δίσκο

Δημοσίευση από spookyb52 » 06 Νοέμ 2005 01:06

Θα σου δώσω ένα βασικό παράδειγμα
Φτιάξε στο flash το παρακάτω

http://users.freestuff.gr/spookyb52/gam ... es/shr.swf


Δήλαδή

1 input textbox
1 button
1 checkbox component

και δώσε τους τα αντίστοιχα instance names

keimeno
okButton
rmb

Αυτό που θα κάνω είναι

α) να αποθηκεύεται το κείμενο όταν πατήσεις το ok button
β) να εμφανίζεται από την επόμενη φορά που θα είσέλθεις στην σελίδα το κείμενο στο textbox άν είναι επιλεγμένο το checkbox


Άνοιξε το actions panel και κάνε copy paste τον κώδικα που ακολουθεί

Κώδικας: Επιλογή όλων

onLoad = function () {
	shareThis = SharedObject.getLocal("mysol");
	if (shareThis.data.epilogh != undefined) {
		rmb.selected = shareThis.data.epilogh;
		if (!shareThis.data.epilogh) {
			shareThis.data.txt = undefined;
		}
	}
	if (shareThis.data.txt != undefined) {
		if (shareThis.data.epilogh) {
			keimeno.text = shareThis.data.txt;
		}
	}
};
//-------------
okButton.onRelease = function() {
	shareThis.data.txt = keimeno.text;
};
//--------------
myListener = {};
myListener.click = function() {
	shareThis.data.epilogh = (!shareThis.data.epilogh) ? true : false;
};
rmb.addEventListener("click", myListener);


Άς τα πάρουμε με την σειρά

Ξεκινάμε από την onLoad συνάρτηση

shareThis = SharedObject.getLocal("mysol");
Αυτό όπως ανέφερα και στο tutorial δημιουργεί (-φορτώνει) ένα shared Object και δημιουργεί μια αναφορά, την shareThis

Κώδικας: Επιλογή όλων

if (shareThis.data.epilogh != undefined) {
		rmb.selected = shareThis.data.epilogh;
		if (!shareThis.data.epilogh) {
			shareThis.data.txt = undefined;
		}
	}
Άν υπάρχει κάποια αποθηκευμένη μεταβλητή με την ονομασία epilogh τότε η ιδιότητα selected του checkbox με instance name rmb θα πάρει την τιμή της. [ true η false ]

Επίσης άν η μεταβλητή με ονομασία epilogh δέν είναι undefined και είναι false τότε η μεταβλητή txt θα είναι undefined

//-------------

Κώδικας: Επιλογή όλων

	if (shareThis.data.txt != undefined) {
		if (shareThis.data.epilogh) {
			keimeno.text = shareThis.data.txt;
		}
	}
Άν υπάρχει κάποια αποθηκευμένη μεταβλητή με την ονομασία txt τότε το textbox με instance name keimeno θα πάρει το περιεχόμενό της άν η μεταβλητή epilogh είναι true (Άν δηλαδή το checkbox είναι επιλεγμένο)

Όταν πρωτοφορτώνουμε το flash οι μεταβλητές αυτές δέν υπάρχουν.

Άς δούμε τον κώδικα στο button [ με instance name okButton ]

Κώδικας: Επιλογή όλων

okButton.onRelease = function() {
	shareThis.data.txt = keimeno.text;
};

Εδώ δημιουργούμε την μεταβλητή txt και της δίνουμε για τιμή το περιεχόμενο του textbox με Instance name keimeno

//-----------------

Για το checkbox θα πρέπει να προσθέσουμε ένα listener

myListener = {};

Δημιουργούμε ένα νέο object, το myListener

Κώδικας: Επιλογή όλων

myListener.click = function() {
	shareThis.data.epilogh = (!shareThis.data.epilogh) ? true : false;
};
Το παραπάνω είναι η συνάρτηση που θα καλείτε όταν πατάμε τσεκάρουμε ή απόεπιλέγουμε το checkbox
Κάθε φορά που πατάμε το checkbox άν η αποθηκευόμενη μεταβλητή epilogh είναι true θα γίνεται false και το αντίστροφο
Την μεταβλητή αυτή άν θυμάσαι την χρησιμοποιήσαμε αρχικά στην onLoad για να καθορίσουμε άν το checkbox θα είναι τσεκαρισμένο, ή όχι, όταν ανοίγει το flash. >>>>> rmb.selected = shareThis.data.epilogh;

Κώδικας: Επιλογή όλων

rmb.addEventListener("click", myListener);
Τέλος προσθέτουμε τον listener στο checkbox με instance name rmb
Life is like a fast car on an icy road. Brakes don't work, yes I know it, but I step on the gas
Garage punk | Rockabilly | Rock 'n' Roll | Stoner

Απάντηση

Επιστροφή στο “Flash γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες