Thread View: pl.comp.lang.php
2 messages
2 total messages
Started by jivanmukta
Fri, 11 Jul 2014 10:38
zmienne globalne JavaScript inicjowane przez PHP
Author: jivanmukta
Date: Fri, 11 Jul 2014 10:38
Date: Fri, 11 Jul 2014 10:38
37 lines
3642 bytes
3642 bytes
Uczę się tworzyć dynamiczne witryny internetowe przy pomocy PHP5/MySQL/HTML/CSS/JavaScript/XML. Piszę pierwszą witrynę w CodeIgniterze.
Na stronie mam duży formularz. W zależności od wyboru na dwóch drop-down listach zmienia się widoczność pól formularza. Drop-down listy i niektóre inne pola wypełniane są danymi z bazy. Wybór z drop-down listy jest obsługiwany w widoku tak:
echo form_dropdown('property_estate_type_id', $estateTypes, null, ' onchange="showPropertyRows();" onkeyup="showPropertyRows();" onkeydown="showPropertyRows();" ');
Aby działała funkcja showPropertyRows() potrzebne są zmienne JavaScript :
<script type="text/javascript">
var furnitureTypes = <?php echo $furnitureTypes; ?>; // słownik dla umeblowania
var units = <?php echo $units; ?>; // słownik jednostek
var unitNames = <?php echo $unitNames; ?>; // słownik nazw jednostek
var offerTypes = <?php echo $offerTypes; ?>; // słownik dla typów ofert
var currencies = <?php echo $currencies; ?>; // słownik dla walut
var estateTypesVisibility = <?php echo $estateTypesVisibility; ?>;
var priceFor = <?php echo $priceFor; ?>;
var offerTypesVisibility = <?php echo $offerTypesVisibility; ?>;
var priceForArray = <?php echo $priceForArray; ?>; // kolejność wartości taka jak w priceFor
var vulgarWords = <?php echo $vulgarWords; ?>; // słowa wulgarne
</script>
których wartości są wyznaczane w kontrolerze:
$this->load->library('common');
...
$params['units'] = $this->common->arrayToJS($model->getUnits(), 0); // słownik jednostek
$params['unitNames'] = $this->common->arrayToJS($model->getUnitNames(), 0); // słownik nazw jednostek
$params['offerTypes'] = $this->common->arrayToJS($model->getOfferTypes(), 0); // słownik dla typów ofert
$params['currencies'] = $this->common->arrayToJS($model->getCurrencies(), 0); // słownik dla walut
$params['estateTypesVisibility'] = $this->common->arrayToJS($model->getEstateTypesVisibility(), 0);
$params['priceFor'] = $this->common->visibilityJS($model->getPriceFor());
$params['offerTypesVisibility'] = $this->common->visibilityJS($model->getOfferTypesVisibility());
$params['priceForArray'] = $model->getPriceForArrayJS(); // kolejność wartości taka jak w priceFor
$params['vulgarWords'] = $this->common->arrayToJS($model->getVulgarWords(), 0); // słowa wulgarne
Nie podoba mi się użycie zmiennych globalnych JavaScript i tworzenie kodu JavaScript w kontrolerze.
Czy da się to zrobić lepiej? Byłbym wdzięczny za pomysły.
Re: zmienne globalne JavaScript inicjowane przez PHP
Author: PawelS cbrbob(at)wbcd(dot)pl
Date: Sat, 12 Jul 2014 23:12
Date: Sat, 12 Jul 2014 23:12
34 lines
3175 bytes
3175 bytes
jivanmukta@poczta.onet.pl pisze:
> Uczę się tworzyć dynamiczne witryny internetowe przy pomocy PHP5/MySQL/HTML/CSS/JavaScript/XML. Piszę pierwszą witrynę w CodeIgniterze.
>
> Na stronie mam duży formularz. W zależności od wyboru na dwóch drop-down listach zmienia się widoczność pól formularza. Drop-down listy i niektóre inne pola wypełniane są danymi z bazy. Wybór z drop-down listy jest obsługiwany w widoku tak:
>
> echo form_dropdown('property_estate_type_id', $estateTypes, null, ' onchange="showPropertyRows();" onkeyup="showPropertyRows();" onkeydown="showPropertyRows();" ');
>
> Aby działała funkcja showPropertyRows() potrzebne są zmienne JavaScript :
>
> <script type="text/javascript">
> var furnitureTypes = <?php echo $furnitureTypes; ?>; // słownik dla umeblowania
> var units = <?php echo $units; ?>; // słownik jednostek
> var unitNames = <?php echo $unitNames; ?>; // słownik nazw jednostek
> var offerTypes = <?php echo $offerTypes; ?>; // słownik dla typów ofert
> var currencies = <?php echo $currencies; ?>; // słownik dla walut
> var estateTypesVisibility = <?php echo $estateTypesVisibility; ?>;
> var priceFor = <?php echo $priceFor; ?>;
> var offerTypesVisibility = <?php echo $offerTypesVisibility; ?>;
> var priceForArray = <?php echo $priceForArray; ?>; // kolejność wartości taka jak w priceFor
> var vulgarWords = <?php echo $vulgarWords; ?>; // słowa wulgarne
> </script>
[...]
> Nie podoba mi się użycie zmiennych globalnych JavaScript i tworzenie kodu JavaScript w kontrolerze.
> Czy da się to zrobić lepiej? Byłbym wdzięczny za pomysły.
Gwoli ścisłości inicjacji zmiennych nie postrzegałbym jako kod.
Nie da się ukryć, że head ... head i w środku script ... script
z definicją zmiennych javascript nie jest zbyt pięknym rozwiązaniem.
W zależności od preferencji możesz spróbować:
1. onload: wykonać z javascript request http i dostać dane w np: json,
2. w dowolnym tagu we właściwości np: "data-source" umieścić dane,
3. w ukrytym formularzu umieścić dane i odczytać je w javascript
Nie wiem czy da się to elegancko zrealizować,
w końcu to dwa różne języki oraz różne warstwy
zastosowania, przeznaczenie i możliwości.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads