paginator : ltrim() expects parameter 1 to be string, object given
- muflix
- Člen | 92
Dobrý den, vypsal jsem si z databáze inzeráty a rozhodl jsem se, že k výpisu přidám VisualPaginator.
Zkusil jsem to sepsat, ale debugger mi vypisuje chybovou hlášku.. ikdyž je to jenom warning tak to neprojde :-)
Warning
ltrim() expects parameter 1 to be string, object given
moje databázová vrstva je v samostatném modelu
class InzeratyModel {
public static function insert($data){
dibi::query('INSERT INTO [inzeraty]', $data);
}
public static function showAll(){
$result = dibi::query('SELECT * FROM inzeraty');
return $result->fetchAll();
}
}
potom asi nejdůležitější, presenter.
class ZobrazitInzeratyPresenter extends BasePresenter {
public function renderDefault(){
/* paginator */
//do promenne $conn se vlozi aktualni spojeni
$conn = dibi::getConnection();
//do dataSource vlozim resultset z databaze
$dataSource = $conn->dataSource(InzeratyModel::showAll());
//dataSource a paginator pak upravuji dle potreb
$dataSource->orderBy('datumVlozeni', dibi::DESC);
$paginator = $this['paginator']->getPaginator(); //$this['paginator'] mi není uplně jasné
$paginator->itemCount = $dataSource->getTotalCount();
$dataSource->applyLimit($paginator->itemsPerPage, $paginator->offset);
//do entries vlozim upraveny dataSource(resultset)
//s entries pak mohu pracovat v sablone
$this->template->entries = $dataSource;
}
protected function createComponentPaginator(){
$visualPaginator = new VisualPaginator();
$visualPaginator->paginator->itemsPerPage = 10; /*tohle by možná v rámci lepší logiky,
mělo být ve funkci renderDefault() */
return $visualPaginator;
}
}
a nakonec šablona, ve které vypisuji inzeráty
{block content}
seznam inzerátů
{if count($entries) > 0}
{control paginator}
{foreach $entries as $entry}
<div class="entry">
<div class="nadpis">{$entry->nadpis}</div>
<div class="html">{!$entry->html|escape|nl2br}</div>
<div class="email">{$entry->email}</div>
</div>
{/foreach}
{control paginator}
{else}
<div class="flash info">Zatím tu nejsou žádné inzeráty.</div>
{/if}
pokusil jsem se to trochu okomentovat a není mi úplně jasná
konstrukce
$this['paginator']->getPaginator();
název paginator a ta metoda se automaticky vytvoří pomocí továrničky
createComponentPaginator()
?
potom, což na funkčnost asi nemá takový vliv, když definuji a
inicializuji vpaginator, tak bych tam asi už v té metodě(továrničce)
createComponentPaginator()
neměl nastavovat nějaké další
nastavení? Pokuď mám v šabloně paginator pouze jeden tak to asi nevadí,
ale jen by mě to zajímalo.
děkuji
edit:
zapoměl jsem napsat, že chybu mi to hodí v dibi/libs/DibiTranslator.php na
řádce 148
147: if ($commandIns === NULL) {
148: $commandIns = strtoupper(substr(ltrim($this->args[0]), 0, 6));
149: $commandIns = $commandIns === 'INSERT' || $commandIns === 'REPLAC';
150: $sql[] = $this->formatValue($arg, $commandIns ? 'v' : 'a');
151: } else {
Editoval muflix (7. 2. 2011 21:21)
- muflix
- Člen | 92
tak jsem přepsal metodu
public static function showAll(){
$result = dibi::query('SELECT * FROM inzeraty');
return $result;
//return $result->fetchAll();
}
a prošlo to na další řádek, ale teď mi to hází
Fatal Error
Class 'Control' not found
v
30: class VisualPaginator extends Control
31: {
doplňek VisualPaginator jsem vložil do složky app/components/
a to je jediné co jsem s tím dělal.. pravděpodobně se tu třídu povedlo
načíst přes robotLoader, který prohledává automaticky všechny složky
v app/ řekl bych. To se mi líbí :-)
edit: neuvedomil jsem si ze pro php5.3 musim ve VisualPaginator.php odkomentovat namespacy
use Nette\Application\Control;
use Nette\Paginator;
teď už to běží, jen mi debugger napsal nějakou další chybu, tak se na ní podívám chjo ;p
Editoval muflix (8. 2. 2011 0:50)
- muflix
- Člen | 92
tak sem na to nepřišel.. debugger mi vyhazuje
DibiDriverException #1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1', 'inzerát 1', 'žluťoučký kůň pěl ďábelské ódy атцйтфаб?*' at line 1
na řádce 163 v dibi/drivers/mysqli.php
162: if (mysqli_errno($this->connection)) {
163: throw new DibiDriverException(mysqli_error($this->connection), mysqli_errno($this->connection), $sql);
a Call stack vrací něco takového
libs/DibiConnection.php (345) source ► DibiMySqliDriver-> query (arguments ▼)
$sql
"SELECT COUNT(*) FROM ('1', 'inzerát 1', 'žluťoučký kůň pěl ďábelské ódy атцйтфаб?*( \' \'´ ´ /', 'muj@email.cz', '2011-02-07', ' ... " (2441)
nevím proč po zavolání
$paginator->itemCount = $dataSource->getTotalCount();
mi to
jako název tabulky bere první řádek tabulky.