Dobrodošli, goste ( Prijava | Registracija )

 
Reply to this topicStart new topic

Wordpress- user_meta, prikaz podataka koje je korisnik unio pri registraciji

V
maniche
poruka Dec 16 2010, 17:30
Poruka #1




Grupa: Članovi 1
Poruke: 14
Datum reg.: 2-August 06
Član broj: 5,652



Pozdrav svima.
imam jedan problem.
napravio sam nekoliko custom fieldsa koje korisnik ispunjava pri registraciji.
Ti podaci se pokazuju u svakom postu koje je taj korisnik napisao.
nešto poput user boxa koje vidimo na web dizajn portalima, gdje se autor članka predstavi čitateljima.

koristim ovaj kod i sve radi dobro:

FUNKCIJA

add_action( 'personal_options_update', 'my_save_extra_profile_fields' );
add_action( 'edit_user_profile_update', 'my_save_extra_profile_fields' );

function my_save_extra_profile_fields( $user_id ) {

if ( !current_user_can( 'edit_user', $user_id ) )
return false;


update_usermeta( $user_id, 'marke', $_POST['Marke'] );

}


(zanima me da li sam ja tu napravio varijablu "marke" ili?)

REGISTRACIJSKA FORMA

<label for="marke">Marke</label>


<input type="text" name="marke" id="marke" value="<?php echo esc_attr( get_the_author_meta( 'marke', $user->ID ) ); ?>" class="regular-text" /><br />


OUTPUT NA STRANICI

<?php if ( get_the_author_meta( 'marke' ) ) { ?>
<?php the_author_meta( 'marke' ).'</p>' ?>
<?php } ?>



e sad, problem je slijedeći:
treba mi da u jedno polje korisnik može unijeti više od jedne vrijednosti..dakle...da unosi proizvode..u polje "marke" on unese "sony, samsung, quadro"...
pošto imam pretraživanje po vrijednostima iz polja, trenutna situacija mi je da ovaj kod u pretraživanje fprmi napravi jedan izbor "sony, samsung, quadro" a ja od ovog unosa trebam 3 izbora..
-sony
-samsung
-quadro

dakle, u outputu trebam niz!

kad radim sa custom fieldima onda samo ponavljam polja "marke" onoliko puta koliko ima marki i foreach funkcijom sve ih nanižem u outputu...
čak bi mi bilo bolje da korisnik unese u svako polje po jednu marku ali mi je glupo imati npr. 20 polja na registracijskoj stranici za isti key..
pa me zanima kako bih mogao prikazati jedno polje za "marke" a pored polja link "dodaj još jedno polje" pa da si korisnik duplira to polje koliko mu puta treba?
Eto zapravo dva pitanja...

hvala svima na odgovorima!

Go to the top of the page
 
+Quote Post
webarto
poruka Dec 16 2010, 17:56
Poruka #2




Grupa: Članovi
Poruke: 755
Datum reg.: 19-December 09
Lokacija: Tuzla
Član broj: 33,477



Nemam pojma Wordpress ali ne treba ti više od jednog polja za te marke, odvoji ih sa ";" ili "," a možeš napraviti array checkbox pa neka zakači, a ti array implodiraj sa "," i upiši u bazu u to "marka" polje... pretragu radi sa LIKE... valjda smile.gif
Go to the top of the page
 
+Quote Post
maniche
poruka Dec 16 2010, 18:44
Poruka #3




Grupa: Članovi 1
Poruke: 14
Datum reg.: 2-August 06
Član broj: 5,652



Hvala ti što si odvojio vremena da se javiš.
moram priznati da ja baš i nisam dobar s php-om, kod koji vidiš skopirao sam sa jednog tutorijala...znam malo, ali uglavnom ono što si napisao-ne razumijem biggrin.gif

ovako zovem više vrijednosti za custom field mjesto npr:

<?php if ( get_post_meta( $Mjesto )); - definirao sam custom field "mjesto"

if ($Mjesto[0]=="") { ?>

<?php } else { ?>
<?php foreach($Mjesto as $Mjesto) {
echo $Mjesto. ', ' ;
} ?>
<?php } ?>

ovaj kod radi na slijedeći način:

dodam polje mjesto i upišem lokaciju...
onda ponovno dodam polje mjesto i dodam drugu lokaciju..itd itd.
output je mjesto 1, mjesto 2 itd itd..
e sad, kako da dobijem isto ali sa mjesto 1 i mjesto 2 upisanima u jedno polje??

mogu riješiti tako ili sa npr. 20 polja za mjesto..što mi nije loše ali da na formi nisu svi vidljivi nego da ih korisnik dodaje koliko mu ih treba..
dakle...upiše prvo mjesto, klikne link "dodaj polje", otvori mu se ispod još jedno polje u koje upiše drugo mjesto..
.kako to izvesti??

da li ovaj dio koda radi sa user meta podacima ako u prvom redu promjenim u <?php if ( get_the_user_meta( $Mjesto ));

?
Go to the top of the page
 
+Quote Post
cls-Igor
poruka Dec 17 2010, 11:44
Poruka #4




Grupa: Članovi
Poruke: 39
Datum reg.: 1-January 07
Član broj: 8,232



Zasto bi uopste dodavao polja na Register strani? Po meni je logicnije da korisnik te informacije unosi / menja preko Profile strane.

webarto ti je dao dobar primer kako da resis problem sa jednim poljem. Drugi pristup ti je komplikovaniji.

CITAT (maniche @ Dec 16 2010, 18:44) *
mogu riješiti tako ili sa npr. 20 polja za mjesto..što mi nije loše ali da na formi nisu svi vidljivi nego da ih korisnik dodaje koliko mu ih treba..
dakle...upiše prvo mjesto, klikne link "dodaj polje", otvori mu se ispod još jedno polje u koje upiše drugo mjesto..
.kako to izvesti??

Sa javascriptom, tj jQuery (primer). Posle vrednost tih polja stavis u array, i sve to prosledis do baze koristeci update_user_meta funkciju (update_usermeta se ne koristi vise):

CODE
update_user_meta( $user_id, $tvoj_meta_key, $array_sa_vrednostima);

Da bi iscitao podatke koristi funkciju the_author_meta (vrednosti ce biti vracene kao array):

CODE
get_the_author_meta($tvoj_meta_key, $userID);

Go to the top of the page
 
+Quote Post
webarto
poruka Dec 17 2010, 17:45
Poruka #5




Grupa: Članovi
Poruke: 755
Datum reg.: 19-December 09
Lokacija: Tuzla
Član broj: 33,477



^

http://www.fotque.info/

Možda mu je jednostavnije ovako, prazna polja se odbacuju.
Go to the top of the page
 
+Quote Post
maniche
poruka Dec 17 2010, 18:05
Poruka #6




Grupa: Članovi 1
Poruke: 14
Datum reg.: 2-August 06
Član broj: 5,652



hvala vam puno obojici!
pošto nisam stručan baš za php, molio bih vas da mi izbacite kod koji unosim na output stranici, za prikaz niza...tj za prikaz jedne vrijednosti ako je korisnik unio samo jedno mjesto.
ovo sve ostalo s poljima mogu riješiti sam...

HVALA
Go to the top of the page
 
+Quote Post
webarto
poruka Dec 17 2010, 18:21
Poruka #7




Grupa: Članovi
Poruke: 755
Datum reg.: 19-December 09
Lokacija: Tuzla
Član broj: 33,477



Hajde ukratko još jednom objasni šta želiš, po stavkama sa primjerima, ukratko smile.gif
Go to the top of the page
 
+Quote Post
maniche
poruka Dec 17 2010, 19:59
Poruka #8




Grupa: Članovi 1
Poruke: 14
Datum reg.: 2-August 06
Član broj: 5,652



dakle ..

-dodatno profil "lokacija" unutar profila korisnika.
korisnik pri ažuriranju profila unosi lokaciju...ukoliko želi unjeti više lokacija, pritiskom na link "dodaj polje" otvara mu se drugo polje u koje može unjeti drugu lokaciju..
slično kako si ti napravio na uploadu slika...
-lokacije koje je korisnik unjeo pokazuju se u obliku niza(lokacija1,lokacija2) u svakom članku koji je dotični korisnik napisao..
dakle,definiranje polja u funkcijama, povlačenje podataka iz baze i prikaz na njegovom profilu.
-lokacije se također prikazuju u tražilici i posjetitelj može pretraživati članke na temelju lokacije.

u mom prvom postu prikazao sam kod s kojim sve ovo izvedem(osim dodavanja extra polja od strane korisnika što ću riješiti sa jquerijem)...ali problem mi je izbaciti u outputu niz...
kada koristim custom fieldse i get post meta onda nižem iste ključeve foreach funkcijom...
ja čak mogu korisniku staviti polje sa Custom fieldom "lokacija" u profil ali sa get_post_meta to se u njegovom postu neće prikazati jer na ovaj način mogu povući samo podatke koje sam unjeo kod dodavanja novog članka...
a meni se taj info treba automatski generirati na njegovom infu u člancima koje on piše..
primjer:
http://www.netokracija.com/gdje-je-posao-poslovi-5248

na dnu posta su podaci o autoru.

nadam se da se sad razumijemo:)
Go to the top of the page
 
+Quote Post
webarto
poruka Dec 17 2010, 20:23
Poruka #9




Grupa: Članovi
Poruke: 755
Datum reg.: 19-December 09
Lokacija: Tuzla
Član broj: 33,477



Stvarno veze nemam sa WP pa će možda kolega cls-Igor da ti pomogne.
Znači možeš uraditi onako kako sam ja na fotque što se tiče HTML-a, stavi name da bude recimo lokacije[] (array).
Slijedeće kad korisnik popuni te podatke ti ih kupiš ovako i upisuješ u bazu.

Unos
CODE
$lokacija = $_POST["lokacija"]; // 0 => Beograd 1 => Novi Sad 2 => Tuzla

$lokacija = implode(",", $lokacija); // Beograd,Novi Sad,Tuzla

mysql_query("UPDATE users SET lokacija = '$lokacija' WHERE id = 1"); // lokacija = 'Beograd,Novi Sad,Tuzla'


Nemaš potrebe budalasati sa foreach i to, slobodno unesi ih ovako, kako želiš ispisati (comma separated).

Čitanje
CITAT
mysql_query("SELECT lokacija FROM users WHERE id = 1 LIMIT 1"); // lokacija = 'Beograd,Novi Sad,Tuzla'


Ovakav prikaz želiš?
CITAT
webarto (Beograd,Novi Sad,Tuzla)


Pretraga
CODE
$grad = $_POST["grad"]; // beograd
mysql_query("SELECT id FROM users WHERE lokacija LIKE '%$grad%'"); // '%beograd%'


Beograd,Novi Sad,Tuzla
Novi Sad,Beograd,Zrenjanin
...

Ovaj upit će ti vratiti sve korisnike koji su ukucali Beograd u lokaciju. Nemoj komplikovati, najjednostavnije rješenje je najbolje.
Go to the top of the page
 
+Quote Post
maniche
poruka Dec 17 2010, 20:47
Poruka #10




Grupa: Članovi 1
Poruke: 14
Datum reg.: 2-August 06
Član broj: 5,652



Webarto, naklon do poda! smile.gif
Igore, također hvala!
Go to the top of the page
 
+Quote Post
kodi
poruka Dec 17 2010, 21:08
Poruka #11




Grupa: Admin
Poruke: 2,642
Datum reg.: 10-February 05
Lokacija: $52/hour
Član broj: 245



Ok, u ovom slucaju ovo *mozda* moze da prodje, ali se u praksi ovako ne radi.


ako nesto pocinje sa % tu indeksiranje vise ne radi

ako je baza velika, i naleti ti ogromna poseta, postoji velika i realna opasnost da ubijes mysql/server

pravilno resenje je posebna tabela, denormalizacija i join na upitu.





ako pakujes nesto sa comma separated, i trazis sa like '%xxx%'
sanse da radis pogresno su ogromne.

ali ok, ne kazem da nece raditi.
Go to the top of the page
 
+Quote Post
webarto
poruka Dec 17 2010, 21:52
Poruka #12




Grupa: Članovi
Poruke: 755
Datum reg.: 19-December 09
Lokacija: Tuzla
Član broj: 33,477



Nema na čemu.

@kodi Slažem se, mislim da će raditi i ovako OK jer će koristiti LIKE samo za pretragu, a da spominjem JOINove i nove tabele (mada mi nije palo na pamet smile.gif) ne znam da li bi shvatio pošto i sam kaže da ne poznaje dobro PHP (pretpostavljam i SQL), tako da može da se vodi sad ovim principom a nadoći će sam kasnije ako šta ne bude štimalo.


I da, always sanitize your input 003.gif
Go to the top of the page
 
+Quote Post
kodi
poruka Dec 17 2010, 22:05
Poruka #13




Grupa: Admin
Poruke: 2,642
Datum reg.: 10-February 05
Lokacija: $52/hour
Član broj: 245



Ma naravno, ja odgovaram vise zbog drugih ljudi koji eventualno citaju.

Go to the top of the page
 
+Quote Post
webarto
poruka Dec 17 2010, 22:24
Poruka #14




Grupa: Članovi
Poruke: 755
Datum reg.: 19-December 09
Lokacija: Tuzla
Član broj: 33,477



Petak je naveče, svi su napolju, igraju se, a mi smo šabani 003.gif
Ej za petak veče je 53$/hour laugh.gif
Go to the top of the page
 
+Quote Post
zlatiborac
poruka Dec 17 2010, 23:05
Poruka #15




Grupa: Članovi
Poruke: 2,762
Datum reg.: 21-January 05
Lokacija: Zlatibor
Član broj: 92



Petak veche je vreme za tajni projekat smile.gif psssssssssssssssssssst.
Go to the top of the page
 
+Quote Post
cls-Igor
poruka Dec 18 2010, 09:34
Poruka #16




Grupa: Članovi
Poruke: 39
Datum reg.: 1-January 07
Član broj: 8,232



Sve to sto je napisao webarto radi WordPress za tebe tako da ti nemas potrebe a i ne bi trebao da radis sa bazom direktno vec kroz WP funkcije. Mada nije na odmet znati kako to sve zapravo i radi.

Dve kljucne funkcije:
update_user_meta sluzi za upis podataka vezano za user'a tj authora
get_the_author_meta koristis da izcitas podatke o authoru (slicna funkcija je the_author_meta) i nju si trebao koristiti umesto get_post_meta koja cita cf podatke vezane za post.

Procitaj sta i kako te funkcije rade, zatim opet prodji kroz tutorijal i sve ce ti biti jasno.
Go to the top of the page
 
+Quote Post
webarto
poruka Dec 18 2010, 12:13
Poruka #17




Grupa: Članovi
Poruke: 755
Datum reg.: 19-December 09
Lokacija: Tuzla
Član broj: 33,477



CODE
update_user_meta( 1, "lokacija", $lokacija);


Što je u stvari...

UPDATE users SET lokacija = '$lokacija' WHERE id = 1;

Idi preko te WP funkcije u svakom slučaju wink.gif
Go to the top of the page
 
+Quote Post
cls-Igor
poruka Dec 18 2010, 13:03
Poruka #18




Grupa: Članovi
Poruke: 39
Datum reg.: 1-January 07
Član broj: 8,232



Sa update_user_meta funkcijom mozes direktno proslediti array koji WP posle sredjuje (koristeci php serialize() funkciju), i odradjuje jos nekoliko sitnica pre upisa u bazu.

WP ti daje funkcije a na tebi je da samo uneses parametre.
Go to the top of the page
 
+Quote Post
maniche
poruka Dec 18 2010, 14:42
Poruka #19




Grupa: Članovi 1
Poruke: 14
Datum reg.: 2-August 06
Član broj: 5,652



da, razumijem...
kao što sa get post meta povučem podatke vezane za single post...tako sa get the author meta povučem podatke za autora.
a kod je zapravo isti, razlika je u tome koje podatke trebam...
hvala vam, lakše je kad ti netko to pojasni..

Go to the top of the page
 
+Quote Post
maniche
poruka Dec 18 2010, 19:52
Poruka #20




Grupa: Članovi 1
Poruke: 14
Datum reg.: 2-August 06
Član broj: 5,652



Evo ljudi ovako..očito imam neke rupe u procesu.
pa d vas malo detaljnije uvedem u priču.

korisnici(neregistrirani i registrirani) mogu na stranici unositi članke koji su zapravo ponuda usluga.
posjetitelji browsaju te članke i mogu ih pretraživati na temelju mjesta i vrste usluge.

neregistrirani korisnici imaju formu u kojoj moraju popuniti sve podatke o ponudi(lokacija,adresa,kontakt).
ukoliko su na više lokacija, dodaju polja koliko im treba.

forma za pretraživanje automatski updejta lokacije koje su korisnici unjeli pri unosu novih ponuda..

to sve radi dobro...koristim custom field-se i ovo je kod:

<?php $mjesto = get_post_meta($post->ID, 'mjesto', false);

if ($mjesto[0]=="") { ?>


<?php } else { ?>


<?php foreach($mjesto as $mjesto) {
echo $mjesto.',';
} ?>


<?php } ?>



e sad, registrirani korisnici imaju olakšan unos u vidu toga da u svom profilu popune unaprijed večinu traženih podataka za unos usluge...znači oni u profilu unesu lokaciju, adresu itd itd. pa kada dodaju novu uslugu samo napišu podatke o usluzi i to je to.

to radim sa tutorijalom s ove stranice u radi sve dobro kada imam samo jednu vrijednost za određeno polje..znači kontakt podaci su jedni i to je to.
http://justintadlock.com/archives/2009/09/...-profile-fields

ali meni treba mogućnost dodavanja više mjesta...kada sam dodao 4 polja za twitter po ovom tutorijalu, optupt mi je uvijek vrijednost jednog polja i ne mogu uopće u ta 4 polja unjeti druge vrijednosti nego uvijek su iste!

kada registrirani korisnik unosi članak..
ja trebam da php prvo provjeri da li je unesen custom field "mjesta" pri upisu članka(pošto tako unose neregistrirani), a ako nije da onda krene provjeravati da li je u profilu korisnika unesen custom field "mjesta" čija će vrijednost biti prikazana u članku!...a ako je korisnik unio više od jednog mjesta da ih naniže baš kako to radi gore spomenuti kod, kada se mjesta unose direktno u novi članak.

eto ljudi, taj kod trebam..opet sam sad muku mučio i nikako da to riješim:(
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic

 



Lo-fi verzija Trenutno vreme: Thursday 23. May 2013 - 16:03

Sve informacije (poruke, teme i sl.) predstavljaju stavove samo njihovih autora.
Objavljivanje informacija sa sajta u nekomercijalne svrhe moguće je samo uz navođenje URL adrese diskusije.
Za sve druge vidove distribucije potrebno je imati izričitu dozvolu administratora Dizajn Zone i/ili autora poruka.
Autorska prava za sadržaj poruke zadržava njihov autor, osim ako nije drugačije naznačeno.

powered by:Plus hosting