Yii Framework Forum: Crud - Wyświetlanie Większej Ilości Pól - Yii Framework Forum

Jump to content

  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

Crud - Wyświetlanie Większej Ilości Pól Rate Topic: -----

#1 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 11 May 2013 - 06:40 AM

Witam. Zaczynam przygodę z Yii i już mam problem. Utworzyłem i wygenerowałem cruda dla tabeli `users` która zawiera aż 20 pól. Gdy chcę zobaczyć listę userów, to widzę tylko pierwsze 6 pól a chciałbym żeby wszystkie były dostępne. Czy można to jakoś rozszerzyć?
0

#2 User is offline   luk1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 20-April 11
  • Location:Poland

Posted 11 May 2013 - 12:10 PM

Dopisz wyświetlanie kolejnych pól w /protected/views/{twoj_kontroler}/_view.php
0

#3 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 13 May 2013 - 02:21 PM

Dzięki! Oto mi chodziło :) Teraz uczę się na podstawie tutorialu bloga: http://www.yiiframew.../prototype.auth
Mam wszystko tak samo, lecz dostaję taki error: Property "User.salt" is not defined.. Dziwne czemu metoda ma odwoływać się do nieistniejącego pola takiego jak salt... Błąd w kursie czy coś pomyliłem?
0

#4 User is offline   palvch 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 23-March 13

Posted 14 May 2013 - 06:36 AM

Jest kilka błedów w kursie i to jest jeden z nich.
Możesz dodać pole "salt" do tabeli lub zmienić tak procedure aby nie kozystała z logiki piola "salt".
0

#5 User is offline   luk1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 20-April 11
  • Location:Poland

Posted 14 May 2013 - 06:40 AM

Pewnie gdzieś pominięto informację o konieczności dodania pola salt do user. Dodaj je (jako np. VARCHAR (32)) i przegeneruj model User.

Quote

Zauważ, że zamiast przechowywać hasło tekstowo w bazie danych, przechowujemy rezultat haszowania hasła oraz losowo wygenerowany klucz soli. Podczas sprawdzania poprawności hasła wprowadzonego przez użytkownika powinniśmy użyć do porównywania rezultatu haszowania hasła zamiast samego hasła.

Sól to dodatkowy ciąg znaków (np. md5 z czasu rejestracji użytkownika w bazie i jakiegoś stałego ciągu znaków), utrudniający ewentualne "złamanie" hasła.
0

#6 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 14 May 2013 - 09:34 AM

To nie oto chodziło. W angielskiej wersji jest inny kod generowania hasha i soli, i w polskim tutorialu nie ma uaktualnionego kodu.
0

#7 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 22 May 2013 - 11:04 AM

Ufff... Po długim czasie wreszcie skończyłem czytać Poradnik do Yii i wiele rzeczy się wyjaśniło mi :) Teraz jeszcze chcę przejść przez kurs robienia bloga, ale pojawia mi się błąd:
Property "PostController._model" is not defined. w /protected/controllers/PostController.php(164)
if($this->_model===null)

Co jest nie tak?
0

#8 User is offline   1cichy 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 12-June 12
  • Location:Poland

Posted 22 May 2013 - 04:42 PM

Masz pole klasy
private $_model;
?
(http://www.yiiframew...-x-7x-operation)
1

#9 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 25 May 2013 - 01:20 AM

Dzięki, pomogło. Patrząc w licencje zauważyłem że w Yii nie wolno umieszczać logów, znaków towarowych. Czy jest jakaś opcja wykupienia licencji i robienia stron komercyjnych? A i czy lepiej korzystać z Zii(data provider,grid view) czy normalnie na modelu metodę find? Chodzi mi o szybkość.
0

#10 User is offline   luk1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 20-April 11
  • Location:Poland

Posted 25 May 2013 - 11:40 AM

Z tego co widzę tutaj, to chodzi o to, że nie można do własnych celów wykorzystywać nazwy Yii, jego logo itp. Możesz go oczywiście wykorzystywać do tworzenia stron komercyjnych, sklepów internetowych itp. Zresztą są płatne np. CMS-y bazujące na Yii (np. Monoray PRO).

Co do drugiego pytania, to w praktyce "pod spodem" komponenty w zii i tak odpalają metody z ORM Yii, więc raczej bez znaczenia.
Dobrze jest jednak kontrolować odpalane zapytania, czas ich trwania, pamiętać o tworzeniu właściwych relacji (oraz używaniu with()) bo niewłaściwie użyty ORM potrafi przy korzystaniu z np. CGridView często wygenerować sporo zbędnych zapytań. Podłącz sobie do projektu Yii debug toolbar i zobacz, jak to u ciebie wygląda.
1

#11 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 02 June 2013 - 07:57 AM

Dzięki za odpowiedzi. Zainstalowałem sobie Yii-Booster ale ten Boostrap powoduje że strona mi się rozwala (w sensie układ css). Czy to tak ma być czy ja coś źle robię?
Rozplanowałem już sobie wszystkie strony, ale teraz muszę dorobić do nich odpowiednie kontrolery i modele. Jest przykładowo takie coś: użytkownik w menu ma zakładkę moje konto w której ma 3 podzakładki: update profilu, historia transakcji, swoje posty. Teraz to ma być wszystko ładowane pod kontroler "profile" czy może profile,transaction i news? A co jak potrzebuje na jakiejś stronie użyć dwóch kontrolerów? Robię kontroler który będzie rozszerzał tamte czy coś?

Edit: Bootstrap działa dobrze ale koliduje z moim css. Czy warto się bawić w zmienianie?
0

#12 User is offline   luk1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 20-April 11
  • Location:Poland

Posted 03 June 2013 - 02:15 AM

Jak chcesz, żeby stronka wyglądała/skalowała się dobrze do urządzeń z mniejszymi ekranami, to warto poprawić swojego CSS-a.
0

#13 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 05 June 2013 - 01:10 AM

Na razie chyba zajmę się resztą aplikacji, a na końcu ewentualnie poprawianiem wyglądu.

W kontrolerze mam coś takiego:
public function actionRegister()
{
   $this->layout = 'content1';
   ...
   $this->render('register',array('model'=>$model,'title'=>'TYTUŁ NAGŁÓWKA'));
}


a w /layouts/content1.php:
<h1><?php echo $title; ?></h1><br>
<?php echo $content; ?>


Pytanie teraz czy w dobry sposób do widoku przesyłam zmienną $title? I dlaczego nie wyświetla layoutu? Gdy wpisze 'column1' to działa, ale dla content1 już nie..
0

#14 User is offline   luk1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 20-April 11
  • Location:Poland

Posted 06 June 2013 - 12:56 AM

Powinno być raczej (zakładam, że content1.php masz w /views/layouts):
public function actionRegister()
{
   $this->layout = '//layouts/content1';
   ...
   $this->title='TYTUŁ NAGŁÓWKA';
   $this->render('register',array('model'=>$model));
}

1

#15 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 06 June 2013 - 02:28 AM

Co do layoutu to jednak się wyświetlał tylko zapomniałem dołączyć style xd.

View Postluk1999, on 06 June 2013 - 12:56 AM, said:

Powinno być raczej (zakładam, że content1.php masz w /views/layouts):
public function actionRegister()
{
   $this->layout = '//layouts/content1';
   ...
   $this->title='TYTUŁ NAGŁÓWKA';
   $this->render('register',array('model'=>$model));
}



Dalej nie wyświetla zmiennej, pomimo że w Debug Toolbar w ContextProporties jest
'title'  =>  'NAGŁÓWEK'

0

#16 User is offline   luk1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 20-April 11
  • Location:Poland

Posted 06 June 2013 - 04:45 AM

Zmień jeszcze layout:
<h1><?php echo $this->title; ?></h1><br>
<?php echo $content; ?>

1

#17 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 07 June 2013 - 08:27 AM

Działa :) Teraz mam tylko problem z walidacją poprzez ajaxa. Mam coś takiego

controllers/SiteController.php:
	public function actionContact()
	{
		$model=new ContactForm;
		if(isset($_POST['ContactForm']))
		{
			$model->attributes=$_POST['ContactForm'];
			if($model->validate())
			{
				$name='=?UTF-8?B?'.base64_encode($model->name).'?=';
				$subject='=?UTF-8?B?'.base64_encode($model->subject).'?=';
				$headers="From: $name <{$model->email}>\r\n".
					"Reply-To: {$model->email}\r\n".
					"MIME-Version: 1.0\r\n".
					"Content-type: text/plain; charset=UTF-8";

				mail(Yii::app()->params['adminEmail'],$subject,$model->body,$headers);
				Yii::app()->user->setFlash('contact','Thank you for contacting us. We will respond to you as soon as possible.');
				$this->refresh();
			}
		}
		$this->render('contact',array('model'=>$model));
	}


views/contact.php:
<?php $this->title='Kontakt'; ?>
<?php $contact = new ContactForm(); ?>
<table cellspacing="0">
    <tbody>
        <?php $form=$this->beginWidget('CActiveForm', array(
                'id'=>'contact-form',
                'enableAjaxValidation' => true,
                'enableClientValidation'=>true,
                'clientOptions'=>array(
                    'validateOnSubmit' => true,
                    'validateOnChange' => true,
                    'validateOnType' => true
                ),
        )); ?>

                <p class="note">Fields with <span class="required">*</span> are required.</p>

                <?php echo $form->errorSummary($model); ?>

                <tr>
                        <?php echo $form->labelEx($model,'name'); ?>
                        <?php echo $form->textField($model,'name'); ?>
                        <?php echo $form->error($model,'name'); ?>
                </tr>

                <tr>
                        <?php echo $form->labelEx($model,'email'); ?>
                        <?php echo $form->textField($model,'email'); ?>
                        <?php echo $form->error($model,'email'); ?>
                </tr>

                <tr>
                        <?php echo $form->labelEx($model,'subject'); ?>
                        <?php echo $form->textField($model,'subject',array('size'=>60,'maxlength'=>128)); ?>
                        <?php echo $form->error($model,'subject'); ?>
                </tr>

                <tr>
                        <?php echo $form->labelEx($model,'body'); ?>
                        <?php echo $form->textArea($model,'body',array('rows'=>6, 'cols'=>50,'class'=>'textarea2')); ?>
                        <?php echo $form->error($model,'body'); ?>
                </tr>

                <?php if(CCaptcha::checkRequirements()): ?>
                <tr>
                        <?php echo $form->labelEx($model,'verifyCode'); ?>
                        <div>
                        <?php $this->widget('CCaptcha'); ?>
                        <?php echo $form->textField($model,'verifyCode'); ?>
                        </div>
                        <div class="hint">Please enter the letters as they are shown in the image above.
                        <br/>Letters are not case-sensitive.</div>
                        <?php echo $form->error($model,'verifyCode'); ?>
                </tr>
                <?php endif; ?>

                <tr>
                        <?php echo CHtml::submitButton('',array('class'=>'submit submit_okay')); ?>
                </tr>

        <?php $this->endWidget(); ?>   
    </tbody>
</table>


views/layout/main.php:
 ...
<?php Yii::app()->clientScript->registerCoreScript('jquery'); ?>
 ...


Jednak walidacja nie działa na bieżąco, lecz dopiero dopiero po submicie pokazuje błędy. Patrzyłem w konsole i nie ma tam żadnych zapytań. Jak to naprawić?
0

#18 User is offline   luk1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 20-April 11
  • Location:Poland

Posted 09 June 2013 - 01:39 PM

W automatycznie wygenerowanych kontrolerach masz podobną metodę:
/**
 * Performs the AJAX validation.
 * @param CModel the model to be validated
*/
protected function performAjaxValidation($model) {
    if(isset($_POST['ajax']) && $_POST['ajax']==='contact-form')
    {
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }
}


Dodaj jeszcze wywołanie w metodzie actionContact:
public function actionContact() {
    $model=new ContactForm;
    $this->performAjaxValidation($model);
    if(isset($_POST['ContactForm']))
    //...
}

1

#19 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 15 June 2013 - 07:01 AM

Może się komuś przyda: w CActiveForm nie wolno używać znacznika <table> inaczej walidacja w ajaxie nei będzie działać.

Pytanie z innej beczki, w jaki sposób pobierać elementy i je wyświetlać? Bo próbowałem z dataProvider i cgridview ale tam jest od razu wygląd który mnie nie interesuje, a potrzebuje samemu zrobić go.
0

#20 User is offline   andrzej1_1 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 67
  • Joined: 16-April 13

Posted 17 June 2013 - 02:56 AM

Udało mi się to zrobić w taki sposób:

Kontroler:
        public function actionIndex() {
            $package = Package::model()->findAll();
            $this->render('x', array(
		'model' => $package,
            ));
        }


Widok:
foreach ($model as $package)
{
   $package = $package->getAttributes();
   ...
   echo "ID: ".$package['id'];
   ...
}


To że działa to jedno, a drugie, czy jest to zrobione w poprawny sposób zgodnie z modelem mvc?

Mam też problem z dopasowywaniem adresów

config/main.php:
                ...
		'urlManager'=>array(
			'urlFormat'=>'path',
			'rules'=>array(
				'<controller:\w+>/<id:\d+>'=>'<controller>/view',
				'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
				'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
                                'package/buy/<type:\w+>/<count:\d+>'=>'package/buy',
			),
                        'showScriptName'=>false,
                        'urlSuffix'=>'.html',
		),
                ...


widok:
<a href="<?php $this->createUrl('package/buy',array('type'=>'normal','count'=>'10')); ?>">KUP</a>


Jednak w miejsce href nie ma wstawionej żadnej wartości. W czym może być problem?
0

Share this topic:


  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users