Premium vypnutie reklamy, automaticky nezapne
- x5
- Člen | 28
Ahojte potrebujem poradiť mám na webe premium systém a v nom možnosť pre premium užívatela vypnúť reklamu na webe na to mám použitý tento kód:
**{if !($user->isLoggedIn() && isset($user->identity->data['disable_advertising']) && $user->identity->data['disable_advertising'] )}**
<div class="partners clearfix">
<a href="nazovwebu" target="_blank">
<img src="{$basePath}/images/partners/LOL.png" alt="LOL" class="partner-frakie">
</a>
</div>
**{/if}**
Všetko ide reklamu vypína aj zapína lebo potrebujem vedieť ako upraviť ten kód, keď niekomu premium vyprší aby mu automaticky tú reklamu hodilo na web, lebo po vypršaný ju má stále vypnutú.Prvý riadok je to vypínanie a zapínanie funkcie.Ďakujem pekne za rady.
Editoval x5 (11. 12. 2015 1:25)
- Jiří Nápravník
- Člen | 710
Problém bude v tom, že uživatel je stále přihlášený a data jsou v identitě stará.
Či-li refreshovat tu identitu v User při každém načtení.
A nebo to netahat z identity, ale mít to v nějaké proměnné, která se bude obnovovat z dtb.
- x5
- Člen | 28
Jiří Nápravník napsal(a):
Problém bude v tom, že uživatel je stále přihlášený a data jsou v identitě stará.
Či-li refreshovat tu identitu v User při každém načtení.
A nebo to netahat z identity, ale mít to v nějaké proměnné, která se bude obnovovat z dtb.
A prosím ťa to ako urobím, nejaké upravenie toho mojho kódu čo som postol vyššie?
- Jiří Nápravník
- Člen | 710
Nejjednodussi bude:
V presenteru něco takoveho
protected function beforeRender(){
parent::beforeRender();
$this->template->disableAdvertising = /*tady si vytahnes informaci z databaze*/;
}
v sablone pak:
{if !($user->isLoggedIn() && $disableAdvertising)}
- Zuben45
- Člen | 268
Já to kdysi řešil úplně primitivně.
Příklad:
- Po odeslání formuláře:
$user->getIdentity()->avatar = $values->avatar;
přepíše se to prozatím než se uživatel odhlásí, a jak se přihlásí, tak se načte již z db.
EDIT:
$user = $this->getUser();
Editoval Zuben45 (11. 12. 2015 10:28)
- iNviNho
- Člen | 352
To nie je vždy dobrý príklad ako to robiť.
Dajme tomu, že dáš niekomu rolu administrátora, on sa prihlási, nastaví sa mu rola a tú rolu tam bude mať až kým sa neodhlási…
Čo ak už nechcem aby bol admin a chcem mu zrušiť práva? Dá sa to samozrejme kadejako vyriešiť, ale najlepšie bude ak sa to vždy bude ťahať výhradne z DB, čo znamená, že všetky jeho dáta budú vždy reprezentovať skutočnú aktuálnu realitu.
Zuben45 napsal(a):
Já to kdysi řešil úplně primitivně.
Příklad:
- Po odeslání formuláře:
$user->getIdentity()->avatar = $values->avatar;
přepíše se to prozatím než se uživatel odhlásí, a jak se přihlásí, tak se načte již z db.
EDIT:
$user = $this->getUser();
- iNviNho
- Člen | 352
<?php
class User extends \Nette\Security\User {
/**
* ... construct atd...
*/
/**
* Returns user entity
* @return \App\Entities\User
*/
public function getEntity() {
return $this->userService->getOneById($this->getId());
}
}
?>
Vždy po siahnutí na $user->getEntity() mám určite najaktuálnejšie informácie
- Zuben45
- Člen | 268
iNviNho napsal(a):
To nie je vždy dobrý príklad ako to robiť.
Dajme tomu, že dáš niekomu rolu administrátora, on sa prihlási, nastaví sa mu rola a tú rolu tam bude mať až kým sa neodhlási…
Čo ak už nechcem aby bol admin a chcem mu zrušiť práva? Dá sa to samozrejme kadejako vyriešiť, ale najlepšie bude ak sa to vždy bude ťahať výhradne z DB, čo znamená, že všetky jeho dáta budú vždy reprezentovať skutočnú aktuálnu realitu.
Zuben45 napsal(a):
Já to kdysi řešil úplně primitivně.
Příklad:
- Po odeslání formuláře:
$user->getIdentity()->avatar = $values->avatar;
přepíše se to prozatím než se uživatel odhlásí, a jak se přihlásí, tak se načte již z db.
EDIT:
$user = $this->getUser();
Však chtěl aby se to okamžitě projevilo ne ?, jinak je jasné že ještě zapíši data do db… ;)
- Jan Endel
- Člen | 1016
Tohle řešení ale každý request na stránku zatíží dotazem do databáze navíc, který potenciálně není potřeba, což takhle mít něco takového:
class User
{
private $premiumTo;
public function isAdvertisementEnabled()
{
$now = new \DateTime();
return $this->premiumTo === NULL || $this->premiumTo >= $now;
}
}
- David Matějka
- Moderator | 6445
@JanEndel ale to je prave ten problem, ktery tu resime – ze po aktualizaci db nedojde k aktualizaci dat v identite :)
- David Matějka
- Moderator | 6445
@JanEndel to je jedno, jestli je to bool nebo datetime. kdyz ti admin tu casovou znamku upravi v db, tak to nebude fungovat