Tippek, trükkök, ötletek

Csak egy sima dependent dropdown-t akarsz nem?

Van egy wiki erre

http://www.yiiframework.com/wiki/24/creating-a-dependent-dropdown

Igen, ez alapján oldottam meg. De a validálás nem működik.

Szerintem két lehetőséged van:

  1. Ha adatbázis a forrás, akkor vedd fel az ország mezőt is a táblába, majd validálj arra.

  2. A modellben hozz létre egy virtuális mezőt, majd a controllerben add meg az értékét a POST tömb alapján.

Köszi, ez lesz a jó. a POST tömb azért nem OK, mert activeformot használok, ajax-al validál még az egész form elküldése előtt.

Sziasztok

Egy olyan kérdésem lenne, hogy használom a CJuiTabs widgetet és az egyik tabfülön belül jqgridet használok ezt csak simán php kódból csinálom. A gondom az hogy a jqgrid táblája kilóg a tabfülön kvülre és nem találtam módot rá hogy úgy paraméterezzem fel a tab widgetet hogy megadhassam a szélességét, hogy ne lógjon ki a grid belőle.

Nem aktuális már a layoutot rontottam el. (Még csak most tanulom a yii-t)

Sziasztok! Szükségem van egy helyi menüre, amibe az adott modulhoz tartozó funkciók kerülnek.

pl az user modulban a profillal kapcsolatos linkek (szerkesztés, új jelszó, …), másik modulnál meg más.

A helyzet az, hogy egy-egy modulban több view is található és nem szeretném mindenhova beírni ugyanazt a menü tömböt.

Most úgy oldottam meg, hogy külön fájlba helyeztem a menut, amit include()-al használok fel a view fájlokban.

Biztosan van ennél szebb megoldás.

Ebben kérnék segítséget.

hali,

most lehet, hogy rosszul ertelmezem a kerdest, de miert nem csinalsz egy widget-et, aminek bepasszolsz egy tombot (a menu elemeit)

most igy gyorsan ezt talaltam: http://www.yiiframework.com/wiki/23/

remelem segit

–iM

ui: egyebkent meg az include() helyett en a renderPartial() kontroller fuggvennyel varialnek, ha az kell

Jól értelmezted.:) Köszi!

Sziasztok!

Lassan készülődik első Yii alapú site-om, azonban beszélgettünk a biztonságról egyik barátommal, és akkor merült fel a form spoofing kérdése (pl. egy termékhez választhatok olyan kiszerelést, ami nem hozzá tartozik, viszont olcsóbb, és ugyanakkora). Eddig nem volt tapasztalatom azzal, hogy Yii-ben ezt hogyan lehet kiszűrni, eddigi oldalaimban meg nem volt rá szükség, itt viszont elég sokszor.

Neten keresgetve nem is igazán találtam megfelelőt, főleg nem Yii-vel kapcsolatban.

Van-e rá valami elegáns, automatikus megoldás, vagy pedig szerver oldalon mindig manuálisan kell ezt ellenőriznem?

Segítségeteket köszönve:

shark

hali,

hat ezt mindenkeppen a szerver oldalon kell valahogy megoldanod ha 100%-os biztonsagot akarsz (van olyan? hehe).

Nezd meg ezt a cikket (nem Yii) http://www.mustap.com/phpzone_post_85_form-spoofing--step-by-step .

Soha nem szabad bizni a felhasznalo altal bevitt adatokban, es hiaba csinalsz pl. egy JavaScript validalast, mi van ha a felhszanalo kikapcsolja a JS a bongeszoben? stb

–iM

Helló!

Köszönöm a válaszod. Az ajánlott cikket ismerem, csak reméltem, hogy van valami elegánsabb, esetleg automatikus megoldás, mert bajos minden helyen tartalmazás viszonyt vizsgálni (kb 15-20 helyen kell checkboxokat vizsgálnom, másnál adatot visz fel a felhasználó, amit a modell ellenőriz).

Más megoldás nem lévén lehet marad a favágás :unsure:

Üdv.:

shark

Nagy fába vágtam a fejemet. Ja nem, csak a fejszémet. :)

Úgy döntöttem, hogy az aktuális munkámat Yii alapokon írom meg. PHP-ben elég jól otthon vagyok, de az MVC keretrendszerek még újak. Szerencsére nem túl szoros a határidő.

Úgy tervezem, hogy az egész rendszer egy oldal lenne amin belül vízszintes tabokkal és függőleges harmónikával lehetne navigálni.A konkrét tartalmakat meg ajax segítségével húzná be a fő keretbe. És sok esetben az oldasávban is ajax-szal töltődnének a menük.

Ha jól sejtem az eddig tanultak alapján, akkor a teljes alkalmazást a Site Controller fogja irányítani és a különböző fő és oldal tartalmakat meg az adott Modelek controller-e és view-jai.

Lécci, erősítsetek vagy cáfoljatok meg mielőtt elindulok a zsákuccába!

Sziasztok!

Problémám az lenne, hogy van két táblám:




CREATE TABLE homerseklet

(

  hom_id integer NOT NULL DEFAULT nextval(('seq_homerseklet'::text)::regclass),

  term_id integer,

  hom_aktualis double precision NOT NULL,

  hom_releallapot smallint NOT NULL DEFAULT 0,

  hom_rogzdatum timestamp without time zone NOT NULL DEFAULT now(),

  hom_beallitott double precision NOT NULL DEFAULT 0.0,

  CONSTRAINT pk_homerseklet_homid PRIMARY KEY (hom_id),

  CONSTRAINT fk_homerseklet_termosztat FOREIGN KEY (term_id)

  REFERENCES termosztat (term_id) MATCH SIMPLE

  ON UPDATE CASCADE ON DELETE SET NULL

)

CREATE TABLE termosztat

(

  term_id integer NOT NULL DEFAULT nextval(('seq_termosztat'::text)::regclass),

  term_nev character varying(50) NOT NULL,

  term_aktualis_homerseklet double precision,

  term_beallitott_homerseklet double precision,

  term_releallapot smallint

  CONSTRAINT termosztat_pkey PRIMARY KEY (term_id)

)



Azt szeretném megcsinálni, hogy pl 6. óránként átlagolja a hőmérsékletet. Erre megírtam ezt a selectet:




SELECT 

  term_nev,

  csoportositott_homerseklet.homerseklet_aktualis_atlag as term_id,,

  csoportositott_homerseklet.homerseklet_beallitott_atlag as hom_aktualis,

  csoportositott_homerseklet.homerseklet_rele_allapot_atlag as hom_beallitott,

  csoportositott_homerseklet.rogzites_datum_intervalum as hom_releallapot

FROM

  "termosztat" "t" 

INNER JOIN

  (SELECT

	homerseklet.term_id AS termosztatid,

	round(CAST (avg(hom_aktualis) AS numeric),2) AS homerseklet_aktualis_atlag,

	round(CAST (avg(hom_beallitott) AS numeric),2) AS homerseklet_beallitott_atlag,

	ROUND(avg(hom_releallapot),0) AS homerseklet_rele_allapot_atlag,

	interval_to_hours(hom_rogzdatum - :beginDateTime) * :rangeInterval AS rogzites_datum_intervalum

  FROM

	homerseklet

  WHERE

	hom_rogzdatum >= :beginDateTime AND

	hom_rogzdatum <= :endDateTime AND

	homerseklet.term_id IN (9, 14, 15)

  GROUP BY

	homerseklet.term_id,

	interval_to_hours(hom_rogzdatum - :beginDateTime) * :rangeInterval

  ) AS csoportositott_homerseklet

ON

  csoportositott_homerseklet.termosztatid = term_id



Ez egész korrekt sebességgel működik, viszont mikor át akarom írni CDbCriteria-ra, és with-del eager loading-olni akarom a termosztat relációt, hibát kapok. Ha nem eager loadingolom, akkor meg használhatatlanul lassú. Term_nevet nem rakhatom group by-ba, mert szintén lassú.




$criteria->alias = "csoportositott_homerseklet";


$criteria->select = "

  csoportositott_homerseklet.term_id as term_id,

  avg(csoportositott_homerseklet.hom_aktualis) as hom_aktualis,

  avg(csoportositott_homerseklet.hom_beallitott) as hom_beallitott,

  avg(csoportositott_homerseklet.hom_releallapot) as hom_releallapot

";


$criteria->condition = "

  csoportositott_homerseklet.hom_rogzdatum >= :beginDateTime AND

  csoportositott_homerseklet.hom_rogzdatum <= :endDateTime AND

  csoportositott_homerseklet.term_id IN (9, 14, 15)

  ";


$criteria->group = "

  csoportositott_homerseklet.term_id,

  interval_to_hours(csoportositott_homerseklet.hom_rogzdatum - :beginDateTime) * :rangeInterval

";


$criteria->params = array(

  'beginDateTime' => $beginDateTime,

  'endDateTime' => $endDateTime,

  'rangeInterval' => $rangeInterval

);


return Homerseklet::model()->with('termosztat')->findAll($criteria);



Hiszen ilyenkor a belső selectbe akarja berakni a join-t. Mit lehet ilyenkor csinálni, hogy kívülre rakja?

Sziasztok!

CGridView-val jelenítek meg egy listát, melyben vannak joinolt táblából származó mezők, és van egy olyan, ami egy joinolt táblához joinolt 2 táblában levő összefűzött mezőkből jelenítené meg a mezőt.

Minden adat teljesen jól megjelenik. Csináltam hozzá a model-ben getter függvényt is. A search függvényt is átírtam a szerintem megfelelőre:




public function search()

	{

		$criteria=new CDbCriteria;

        

        

		$criteria->compare('t.id',$this->id);


		$criteria->compare('t.name',$this->name,true);


		$criteria->compare('t.start_date',$this->start_date,true);


		$criteria->compare('t.end_date',$this->end_date,true);


		$criteria->compare('t.campaign_name',$this->campaign_name, true);

        

        $criteria->compare('sector_translation.szoveg',$this->bannerFilter,true);


		$criteria->compare('t.position1',$this->position1,true);


		$criteria->compare('t.position2',$this->position2,true);


		$criteria->compare('t.partner',$this->partner,true);


		$criteria->compare('t.sales',$this->sales,true);


		$criteria->compare('t.create_user',$this->create_user,true);


		$criteria->compare('t.create_date',$this->create_date,true);


		$criteria->compare('t.last_modify_user',$this->last_modify_user,true);


		$criteria->compare('t.last_modify_date',$this->last_modify_date,true);


        $criteria->with = array('regions', 'regions.region', 'regions.region.translation', 'sectors', 'sectors.sector', 'sectors.sector.sector_translation');




		return new CActiveDataProvider(get_class($this), array(

			'criteria'=>$criteria,

		));

	}



A problémám az, ha megpróbálok bannerFilter mezőre filter-ben keresni, akkor nem sikerül. Ha be van kapcsolva a log, akkor abban azt látom, hogy 2 query fut le egymás után az egyikben nincs benne a join - pedig a with meg van adva a criteria-nak - és a következőben pedig ugyanaz lefut a joinokkal együtt. A hiba akkor jelentkezik ha megpróbálok a joinolt mezőben keresni, mivel a joinok nélküli queryben meghal a where-ben levő feltétel.

Mi lehet a probléma? Ha kell bemásolgatok kódrészleteket, csak mondjátok meg melyik részt.

íme a 2 log bejegyzés:

11:50:29.4739 trace system.db.CDbCommand

Querying SQL: SELECT t.id AS t0_c0, t.name AS t0_c1,

t.start_date AS t0_c2, t.end_date AS t0_c3, t.campaign_name

AS t0_c4, t.partner AS t0_c5, t.sales AS t0_c6,

t.position1 AS t0_c7, t.position2 AS t0_c8, t.create_user

AS t0_c9, t.create_date AS t0_c10, t.last_modify_user AS

t0_c11, t.last_modify_date AS t0_c12, t.mode AS t0_c13,

t.state AS t0_c14 FROM jm_container t LIMIT 10

in

/var/www/jobmonitor/frameworks/framework-1.1.3.r2247/zii/widgets/CBaseListView.php

(105)

in

/var/www/jobmonitor/frameworks/framework-1.1.3.r2247/zii/widgets/grid/CGridView.php

(220)

in

/var/www/jobmonitor/jobmonitor_admin/protected/views/container/admin.php

(57)

11:50:29.6557 trace system.db.CDbCommand

Querying SQL: SELECT t.id AS t0_c0, regions.container_id AS

t1_c0, regions.region_id AS t1_c1, region.regioid AS t2_c0,

region.nev AS t2_c1, region.sorrend AS t2_c2,

region.statusz AS t2_c3, region.special AS t2_c4,

region.create_user AS t2_c5, region.create_date AS t2_c6,

region.last_modify_user AS t2_c7, region.last_modify_date AS

t2_c8, translation.id AS t3_c0, translation.lang AS t3_c1,

translation.szoveg AS t3_c2, translation.entity_id AS t3_c3,

translation.create_user AS t3_c4, translation.create_date AS

t3_c5, translation.last_modify_user AS t3_c6,

translation.last_modify_date AS t3_c7 FROM jm_container t LEFT

OUTER JOIN jm_container_regions regions ON

(regions.container_id=t.id) LEFT OUTER JOIN jm_regions region

ON (regions.region_id=region.regioid) LEFT OUTER JOIN jm_texts

translation ON (region.nev=translation.id) WHERE (t.id IN

(2, 6, 9, 12, 13)) AND ((translation.lang=‘hu’ or translation.lang is

null))

in

/var/www/jobmonitor/frameworks/framework-1.1.3.r2247/zii/widgets/CBaseListView.php

(105)

in

/var/www/jobmonitor/frameworks/framework-1.1.3.r2247/zii/widgets/grid/CGridView.php

(220)

in

/var/www/jobmonitor/jobmonitor_admin/protected/views/container/admin.php

(57)

Üdv,

ismerkedek a yii-vel. De már most van egy kis apró gondom. Gondolom egyszerű lenne a megoldás, de én nem találom a neten. :)

Egy nagyon egyszerű jog kezelésről lenne szó. A users táblában van egy jog oszlop. Ha 1-es akkor admin, ha 2-es akkor moderátor, ha 3-as akkor sima user. Ezt szeretném beleintegrálni valahogy az accessRule szabályok közé. Hogy lehetne ezt megoldani?

A users mezőbe kellene ezt valahogy…mindenkit nem szeretnék felsorolni.

Illetve van egy érdekes dolog, Comment controll fájlban. Meg van adva, hogy csak belépett felhasználók küldhetnek be akármit is. Mégis be lehet küldeni anonimként is.

Illetve a jelenleg belépett felhasználó adatait, hogy érem el? Csinálni kell mindig egy lekérdezést? Vagy jobb ha már belépéskor elmentem ezeket?

Bocs a sok kérdés miatt. :)

Az utolsóra tudok válaszolni, ami lehet a másodikat is megoldja. Az elsőre én sem tudom a választ :)

Szóval, amikor beloginoltatod a usert, akkor az kb így történik:




Yii::app()->user->login($identity,$duration);



Ahol az Identity egy CUserIdentity, a Duration pedig hogy meddig maradjon belépve.

Tehát az identity-nek nézz utána, azon belül lehet beállítani pl azt, hogy valaki admin-e:




$this->setState('isAdmin',true);



amit utána a következőképp érsz el, ha a user be van lépve:




Yii::app()->user->isAdmin



Üdv!

Alakul, bár vannak érdekességek. Felnyomtam a yii-users modult a blog demo-ba, de nem a rendes modellbe húzza bele, hanem csak kinyomja a html tartalmat, mindenféle head, body nélkül. Maga a modul megy, csak épp nem jó helyen. :)

De rajta vagyok a dolog, menni fog ez szerintem. Különösen tettszik ez a gii, hogy legenerál mindent. :)

Kikukáztam mindent, majd az elejétől kezdve húztam fel a rendszert. Most minden okés. A jogosultságok is lassan készen vannak. Egyre jobban megkedvelem. Kicsit cms feelingje van, de mégsem.

Ez az MVC generáló meg valami zseniális. :)

Használja más is ezt a users kiegészítőt?

Kisebb probléma merült fel vele ismét. :)

Létrehoztam egy új profile_field-et avatars néven. Értelem szerűen ide jönnek majd az avatarok, megadtam neki, hogy hova rakja őket. De érdekes mód csak az adminnak tudok fájlt feltölteni usernek nem, még adminként sem.

Itt akkor a controllerben állítsam most be, hogy okés legyen neki is? Illetve amikor feltölti akkor át is szeretném nevezni, a kiegészítő erre nem ad lehetőséget, pedig jó lenne.

Lassan pedig minden megy rajta. :)

Na, az előzőt sikerült megoldani. Valami "szemét" került a fájlfeltöltés validálásába. Az UWfile fájlban megadtam neki, hogy csak az adott field-et validálja és most okés.

Ellenben apró gondban vagyok ismételten. :)

Van egy post modell/controller ezek a blogbejegyzések. Ezekhez akarok csatolmányt. Létre is hozam ezalapján egy item modellt/controllert. Majd a widgetet beillesztettem a post _form mezőjébe. Szépen jelzi is a form a fájl fieldet. Ellenben postoláskor, se az adatbázisba nem kerül semmi, se a mappába. :)

Ötlet, hogy mit bénázok el? :)

kód