Csak egy sima dependent dropdown-t akarsz nem?
Van egy wiki erre
http://www.yiiframework.com/wiki/24/creating-a-dependent-dropdown
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:
Ha adatbázis a forrás, akkor vedd fel az ország mezőt is a táblába, majd validálj arra.
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
Ü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