1

(1 odpowiedzi, napisanych Ogólne)

ok, mam rozwiązanie problemu.
ustawiłem primaryKey na inny klucz niz jest w bazie, przez to MSSQL głupiał  big_smile

2

(1 odpowiedzi, napisanych Ogólne)

Witam,

mam problem z wstawianiem nowych rekordów do tabeli w MSSQL.
chce dodawać rekordy w pętli.
Jeden rekord jest dodawany, a następne lecą updatem po nim.

oczywiście nie zapomniałem wstawić

3

(1 odpowiedzi, napisanych Ogólne)

Jeśli w przeglądarce przełącze kodowanie z utf na windows 1250 to jest ok, ale po wczytaniu i tak jest UTF-8. nie ma znaczenia jaka wartość jest w:
<meta http-equiv="Content-type" content="text/html; charset=windows-1250">

pozdr.

4

(1 odpowiedzi, napisanych Ogólne)

Witam wszystkich,

mam problem z "krzakami"

CakePHP łączy się z bazą MSSQL, która jest kodowana w windows 1250, w Configure::write('App.encoding', 'utf-8'); nie da sie ustawic windows 1250 albo nie wiem jak.

Co zrobić zeby CakePHP prawidłowo pracował z windows 1250.

pozdr.

Jak wyłączyć, żeby CakePHP nie próbował automatycznie zmieniać języka?
Mam aplikacje korzystającą z i18n, ale dane są wprowadzone tylko w języku polskim.

Nie chce, żeby jakiś np. anglik wszedł na stronę i nic mu się nie pokazało. Chcę żeby on też widział polską wersję.

pozdr.

6

(6 odpowiedzi, napisanych Ogólne)

tekst + obrazek w teksie - to jest wszystko w bazie. jesli dam polecenie php tam to chyba nie bedzie sparsowane?

7

(6 odpowiedzi, napisanych Ogólne)

nie rozumiem :-)

co da wyprintowanie $this->base ?

możesz podać więcej szczegółów?


pozdr.

8

(6 odpowiedzi, napisanych Ogólne)

Witam,

tworzę panel admina do mojej strony. W artykule można wstawić obrazek (do pola textarea mam WYSIWYG). Ścieżka dostępu prawidłowa żeby zdjęcie pojawiło się w tym wysiwyg musi zawierać nazwę katalogu ponieważ pracuję na localhost. Dajmy na to <img src="/cake/img/obrazek.jpg" />

Gdy przeniosę stronę na serwer to obrazki już się nie wyświetlą, ponieważ adres powinien być <img src="/img/obrazek.jpg" />

Czy ma ktoś jakiś pomysł jak to mądrze rozwiązać?

Może wyrażeniem regularnym szukać ciągu i zamieniać go na odpowiedni w controlerze w beforeRender ?

Może też np. stworzyć zmienną i np. w adminie pisać <img src="{img}/obrazek.jpg" /> i nastepnie zamieniać to {img}

Sam nie wiem...

pozdr.

9

(0 odpowiedzi, napisanych i18n, l10n)

witam,

Mam dwa modele - Product oraz Science.
Product hasMany Science.

Zarówno model Product jak i model Science są tłumaczone przez i18n. Problem polega na tym, że gdy czytam dane produktu i mam ustawione recuresive np. na 1 lub więcej to w tablicy dostaję przetłumaczone dane Product z tabeli i18n, ale  nieprzetlumaczone dane na sztywno wczytane z tabelki sciences.

tak wyglada controller

<?php
class ProductsController extends AppController {

    var $name = 'Products';
    var $helpers = array('Html', 'Form','FlvPlayer','Text');
    //var $layout = 'products';
    
    
    
    function index() {
        $this->Product->recursive = 0;
        $this->set('products', $this->paginate());
        $this->layout = 'products';
    }

    function view($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Invalid Product.', true));
            $this->redirect(array('action'=>'index'));
        }
        $this->set('product', $this->Product->read(null, $id));
        $this->layout = 'products';
    }
    
    function science($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Invalid Product.', true));
            $this->redirect(array('action'=>'index'));
        }
        $this->Product->recuresive = 1;
        $this->set('product', $this->Product->read(null, $id));
        $this->layout = 'products';
    }

dlaczego te dane nie są przetlumaczone?

Jeśli próbuję dostać się do danych bezpośrednio z controllera sciences tłumaczy jak należy.

pozdr.

10

(1 odpowiedzi, napisanych Ogólne)

witam,
mam dziwny problem ponieważ nie mogę edytować rekordu. Zamiast edycji, wstawia nowy, oparty na starym.

tak wyglada moj model

<?php
class Product extends AppModel {

    var $name = 'Product';
    var $validate = array(
        'name' => array('notempty'),
        
        'status' => array('numeric'),
        
    );
    
    var $order = array('Product.name ASC');
    
    var $actsAs = array('Sluggable'=>array('label'=>'name','separator'=>'-','translation'=>'utf-8'),'Translate'=>array('name','description'));
    //The Associations below have been created with all possible keys, those that are not needed can be removed
    var $hasMany = array(
        'Ad' => array(
            'className' => 'Ad',
            'foreignKey' => 'product_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        ),
        'Fact' => array(
            'className' => 'Fact',
            'foreignKey' => 'product_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        ),
        'Question' => array(
            'className' => 'Question',
            'foreignKey' => 'product_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        ),
        'Science' => array(
            'className' => 'Science',
            'foreignKey' => 'product_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        ),
        'Testimonial' => array(
            'className' => 'Testimonial',
            'foreignKey' => 'product_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );

    var $hasAndBelongsToMany = array(
        'Category' => array(
            'className' => 'Category',
            'joinTable' => 'categories_products',
            'foreignKey' => 'product_id',
            'associationForeignKey' => 'category_id',
            'unique' => true,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
            'deleteQuery' => '',
            'insertQuery' => ''
        ),
        'Clip' => array(
            'className' => 'Clip',
            'joinTable' => 'clips_products',
            'foreignKey' => 'product_id',
            'associationForeignKey' => 'clip_id',
            'unique' => true,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
            'deleteQuery' => '',
            'insertQuery' => ''
        )
    );

}
?>

kontroler:

<?php
class ProductsController extends AppController {

    var $name = 'Products';
    var $helpers = array('Html', 'Form');
    
    function index() {
        $this->Product->recursive = 0;
        $this->set('products', $this->paginate());
    }

    function view($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Invalid Product.', true));
            $this->redirect(array('action'=>'index'));
        }
        $this->set('product', $this->Product->read(null, $id));
    }    

    function admin_index() {
        $this->Product->recursive = 0;
        $this->set('products', $this->paginate());
    }

    function admin_view($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Invalid Product.', true));
            $this->redirect(array('action'=>'index'));
        }
        $this->set('product', $this->Product->read(null, $id));
    }

    function admin_add() {
        if (!empty($this->data)) {
            $this->Product->create();
            if ($this->Product->save($this->data)) {
                $this->Session->setFlash(__('The Product has been saved', true));
                $this->redirect(array('action'=>'index'));
            } else {
                $this->Session->setFlash(__('The Product could not be saved. Please, try again.', true));
            }
        }
        $clips = $this->Product->Clip->find('list');
        $this->set(compact('clips'));
    }

    function admin_edit($id = null) {
        if (!$id && empty($this->data)) {
            $this->Session->setFlash(__('Invalid Product', true));
            $this->redirect(array('action'=>'index'));
        }
        if (!empty($this->data)) {
            if ($this->Product->saveAll($this->data)) {
                $this->Session->setFlash(__('The Product has been saved', true));
                $this->redirect(array('action'=>'index'));
            } else {
                $this->Session->setFlash(__('The Product could not be saved. Please, try again.', true));
            }
        }
        if (empty($this->data)) {
            $this->data = $this->Product->read(null, $id);
        }
        $clips = $this->Product->Clip->find('list');
        $this->set(compact('clips'));
    }

    function admin_delete($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Invalid id for Product', true));
            $this->redirect(array('action'=>'index'));
        }
        if ($this->Product->del($id)) {
            $this->Session->setFlash(__('Product deleted', true));
            $this->redirect(array('action'=>'index'));
        }
    }

}
?>

no i widok

<div class="products form">
<?php echo $form->create('Product');?>
    <fieldset>
         <legend><?php __('Edit Product');?></legend>
    <?php
        echo $form->input('name');
        echo $form->input('description');
        echo $form->input('images');
        echo $form->input('flash');
        echo $form->input('status');
        echo $form->input('slug');
        echo $form->input('date');
        echo $form->input('Clip');
        echo $form->input('Category');
    ?>
    </fieldset>
<?php echo $form->end('Submit');?>
</div>
<div class="actions">
    <ul>
        <li><?php echo $html->link(__('Delete', true), array('action' => 'delete', $form->value('Product.id')), null, sprintf(__('Are you sure you want to delete # %s?', true), $form->value('Product.id'))); ?></li>
        <li><?php echo $html->link(__('List Products', true), array('action' => 'index'));?></li>
    </ul>
</div>

czyli kod wyglada zupełnie standardowo, jednak w rekord nie jest aktualizowany tylko dodawany nowy. Czy ktoś ma jakis pomysł?

pozdr.

11

(3 odpowiedzi, napisanych Ogólne)

ok, mam rozwiązanie.
Otworzyłem komponent swiftmailer w Notepad++

Następnie wykonałem polecenia:
Koduj w UTF-8 (bez BOM)

Rozwiązanie znalazłem w komentarzach tutaj:
http://www.justkez.com/cakephp-cannot-m … nformation

straciłem na taką drobnostkę 2 godziny - może komuś się przyda i zaoszczędzi komuś nerwów:)

12

(3 odpowiedzi, napisanych Ogólne)

witam,

mam problem ze sławnym komunikatem: Cannot modify header information.

Problem pojawia się w momencie gdy chcę wysłać maila za pomocą SwiftMailer - problem o tyle ciekawy, że w jednym projekcie działa, a w drugim nie smile

Warning (2): Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\aplikacja\app\controllers\components\swift_mailer.php:1) [CORE\cake\libs\controller\controller.php, line 640]

Code | Context

$status    =    "Location: http://localhost/fagp/pages/form_ok"

header - [internal], line ??
Controller::header() - CORE\cake\libs\controller\controller.php, line 640
Controller::redirect() - CORE\cake\libs\controller\controller.php, line 621
ContactsController::add() - APP\controllers\contacts_controller.php, line 35
Object::dispatchMethod() - CORE\cake\libs\object.php, line 115
Dispatcher::_invoke() - CORE\cake\dispatcher.php, line 227
Dispatcher::dispatch() - CORE\cake\dispatcher.php, line 194
[main] - APP\webroot\index.php, line 88

pierwsze linie kodu swiftmailer komponent to

<?php 
// File -> app/controllers/components/swift_mailer.php
//http://bakery.cakephp.org/articles/view/updated-swiftmailer-4-xx-component-with-attachments-and-plugins

/** 
 * SwiftMailer 4.03 Component
 * 
 * @author Matt Huggins
 * @version 2.21
 * @license MIT
 * @category Components
 * @modifiedby d3f_l3pp4rd
 */

wiec nie ma nic co moze powodowac blad.

Korzystam z SwiftMailer w nastepujacy sposob

function add() {
        if (!empty($this->data)) {
            $this->Contact->create();
            if ($this->Contact->save($this->data)) {
                $this->Session->setFlash(__('The Contact has been saved', true));
                $this->contact($this->data); 
                $this->redirect(array('controller'=>'pages','action'=>'form_ok'));
                
                }
                
             else {
                $this->Session->setFlash(__('The Contact could not be saved. Please, try again.', true));
            }
        }
    }

funkcja $this->contact();

 
        $this->SwiftMailer->smtpHost = 'tutaj jest host;
       // $this->SwiftMailer->smtpPort = 465;
        $this->SwiftMailer->smtpUsername = 'login';
        $this->SwiftMailer->smtpPassword = 'haslo';

        $this->SwiftMailer->sendAs = 'html';
        $this->SwiftMailer->from = 'adres_email_smtpl';
        $this->SwiftMailer->fromName = 'Automat';
        $this->SwiftMailer->to = 'tutaj to wysylaml';
         
        
     
       $this->set('message', $data);
        
        try {
            if(!$this->SwiftMailer->send('kontakt', 'Kontakt ze strony xxx')) {
                foreach($this->SwiftMailer->postErrors as $failed_send_to) {
                    $this->log("Failed to send email to: $failed_send_to");
                }
            }
        }
        catch(Exception $e) {
              $this->log("Failed to send email: ".$e->getMessage());
        }
        $this->autoRender = false;
    } 

szablon wiadomości kontakt.ctp wyglada tak

<p><?php __('Name'); ?>: <?php echo $message['Contact']['name'] ?></p>
<p><?php __('Email'); ?>: <?php echo $html->link($message['Contact']['email'],'mailto:'.$message['Contact']['email']) ?></p>
<p><?php __('Subject'); ?>: <?php echo $message['Contact']['subject'] ?></p>
<p><?php __('Message'); ?>: <?php echo $message['Contact']['message'] ?></p>

oczywiście sprawdziłem i nigdzie nie ma zadnych znaków po "?>"

ma ktoś może pomysł gdzie leży przyczyna?

13

(14 odpowiedzi, napisanych Ogólne)

$this->international_paranoid($gallery['name']);

Fatal error: Call to undefined method View::international_paranoid() in C:\xampp\htdocs\cake\app\views\shows\clip_detail.ctp on line 21

14

(14 odpowiedzi, napisanych Ogólne)

w widoku teraz to jedynie sprawdzam jakby to wygladalo.

robal77 - jakbys to rozwiazal.
czytam sobie dane przez find nastepnie petla przez ta tablice dodaje dynamicznie pole url w ktorym jest zamieniona wartosc z name przez inflector::slug?

pozdr.

15

(14 odpowiedzi, napisanych Ogólne)

funkcja ta wyglada tak

function international_paranoid($string, $allowed = array()) {
        $allow = null;
        if (!empty($allowed)) {
            foreach ($allowed as $value) {
                $allow .= "\\$value";
            }
        }
        
        if (is_array($string)) {
            foreach ($string as $key => $clean) {
                $cleaned[$key] = preg_replace("/[^{$allow}\p{L}0-9]/u", '', $clean);
            }
        } else {
            $cleaned = preg_replace("/[^{$allow}\p{L}0-9]/u", '', $string);
        }
        return $cleaned;
    }

generlanie wykorzystalbym Inflector:slug, ale "psuje" mi polskie znaki. robi cos takiego "m�-�czyzn.html" zamiast "mezczyzn.html"

16

(14 odpowiedzi, napisanych Ogólne)

witam,

mam pewien banalny problem.
nie wiem w jaki sposób dostać się w widoku lub kontrolerze do funkcji znajdującej się w app_controller.php

Próbowałem metodą prób i błędów

$this->nazwa_funkcji();

Controller->nazwa_funkcji();

parent::nazwa_funkcji();

Controller::nazwa_funkcji();

zadne nie dziala. jak wywołać tą funkcję?

pozdr.

17

(7 odpowiedzi, napisanych i18n, l10n)

ok, mój problem spowodowany był błędem na stronie CakePHP, a w zasadzie drobną różnicą.

wg. API powinno być:

bindTranslation( $model, $fields, $reset = true )

tymczasem u mnie dziala tak:

bindTranslation($fields, $reset)

18

(7 odpowiedzi, napisanych i18n, l10n)

nie w tym rzecz.

problem lezy w tym, ze odczytuje tylko nazwe.

        [field] => name
                            [content] => nazwa produktu po polsku

brakuje description i url.

teraz zapytanie dla tabeli i28n wyglada tak

SELECT `ProductsDescriptions`.`id`, `ProductsDescriptions`.`locale`, `ProductsDescriptions`.`model`, `ProductsDescriptions`.`foreign_key`, `ProductsDescriptions`.`field`, `ProductsDescriptions`.`content` FROM `mayer_i18n` AS `ProductsDescriptions` WHERE `model` = 'Product' AND `field` = 'name' AND `ProductsDescriptions`.`foreign_key` = (22)

nie potrzebne jest to `field` = 'name'

19

(7 odpowiedzi, napisanych i18n, l10n)

Spójrz na tablice Product.
Behavior automatycznie wyciaga dane wg. aktualnego jezyka do pól name, description, url.

Problem w tym, że ja chcę na raz edytować wszystkie 3 języki.

20

(7 odpowiedzi, napisanych i18n, l10n)

nie rozumiem. możesz rozwinąć pytanie?

21

(7 odpowiedzi, napisanych i18n, l10n)

witam,
korzystam z i18n do tlumaczenia zawartosci bazy.
Problem pojawił się przy edycji bo nie wiem jak to mogę zedytować.
Do i18n przesyłam name, description oraz url - i te wartosc sa zapisywane.

Jednak gdy chce odczytać dane to nie mam tego description oraz url (oczywiście w bazie sa)
Robię wg. tego przykładu:
http://book.cakephp.org/pl/view/797/Ret … or-a-field

$this->Product->bindTranslation(array ('name' => 'ProductsDescriptions'));

i to co zwraca mi $this->data wyglada tak

[Product] => Array
                (
                    [id] => 1
                    [image] => jkh
                    [date] => 2009-07-29
                    [locale] => pol
                    [description] => opis po polsku
                    [url] => urllllll
                    [name] => nazwa produktu po polsku
                )

             

            [ProductsDescriptions] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [locale] => pol
                            [model] => Product
                            [foreign_key] => 1
                            [field] => name
                            [content] => nazwa produktu po polsku
                        )

                    [1] => Array
                        (
                            [id] => 4
                            [locale] => eng
                            [model] => Product
                            [foreign_key] => 1
                            [field] => name
                            [content] => nazwa po angielsku
                        )

                    [2] => Array
                        (
                            [id] => 7
                            [locale] => rus
                            [model] => Product
                            [foreign_key] => 1
                            [field] => name
                            [content] => nazwa po rusku
                        )

                )

Jak mam wyciągnąć description i opis skoro 3 razy by byla wartosc field oraz content?

Jeśli ktoś ma jakiś pomysł - proszę o odpowiedź.

pozdr.

22

(5 odpowiedzi, napisanych Ogólne)

przepraszam,
już daje linka.
funkcję wziąłem z dokumentacji Cake

http://api.cakephp.org/class/router#met … nnectNamed

23

(5 odpowiedzi, napisanych Ogólne)

jestem dosyć słaby z angielskiego, więc mam pytanie.

do czego służy

Router::connectNamed(false, array('default' => true)); 

i dziala tak jak chce.

http://localhost/cake/products/view/1,jkhjkh.html

- zupelnie ignoruje to ",jkhjkh.html". nie wiem czy to poprawne, ale dziala tak jak chcialem. jeszcze nie wiem co z paginacja, ale pomysle pozniej.
czy to dobre rozwiazanie?

pozdr.

24

(5 odpowiedzi, napisanych Ogólne)

witam,

chciałbym tworzyc linki w postaci np. www.adres.pl/projects/art161,ciekawa-realizacja.html

czyli chciałbym, żeby wszystko działało tak jak dziala do tej pory w cake. mam kontroler np. project w nim akcje view.
daje tak www.adres.pl/projects/art161,ciekawa-realizacja.html to chce wybrac rekord z bazy o id 161.

słówko art jest nie istotne, podobnie wartosc po przecinku. wystarczy zwykla zabawa z routerem?

pozdr.

25

(6 odpowiedzi, napisanych Wasze projekty)

pochwal sie co juz zrobiles.

cos tam moze moglbym pomoc