Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Altimit
Člen | 82
+
0
-

Ahoj opět píšu, ale nevím si fakt rady :D
Tak jedná se o to, že chci udělat výpis pravidel z databáze..
v php jsem měl tuto možnost:

$result = mysql_query("SELECT * FROM rules WHERE active = '1' AND typ = '1'");
$total_results = mysql_num_rows($result);

for ($i = $start; $i < $end; $i++) {
    // make sure that PHP doesn't try to show results that don't exist
    if ($i == $total_results) {
        break;
    }
echo '<tr class="danger">';
echo "<td>" . mysql_result($result, $i, 'id') . "</td>";
echo "<td>" . mysql_result($result, $i, 'rule') . "</td></tr>";
}

ten typ určuje zda-li to jsou pravidla všeobecná, teamspeak nebo serveru
ideální by bylo kdyby byl potom odkaz třeba takový: localhost/server/www/rules/1 nebo /localhost/server/www/rules/teamspeak
routrovani neumím.. a nette je fakt super
Děkuji za odpovědi.

Felix
Nette Core | 1248
+
0
-

Ahoj,

Databaze

Doporucuju precist dokumentaci (https://doc.nette.org/cs/database). :-)

Nejjednodussi priklad.

public fuction actionDefaultList($active = 1, $type = 1) {
	$this->template->rules = $this->model->getRules($active, $type);
}
/** @var Nette\Database\Context */
private $db;

public function getRules($active, $type) {
    // Validate arguments!
	return ->db->table('rules')->where(['active' => $active, 'type' => $type]);
}

Routovani

Routovani je uplne jednoduchy (https://doc.nette.org/…tion/routing) :-)

$router[] = new Route('pravidla/<active>/<type>', 'Rules:list');

Editoval Felix (19. 11. 2015 21:27)

CZechBoY
Člen | 3608
+
+1
-

Presenter:

/**
 * @var Nette\Database\Context
 * @inject
 */
public $db;

public function actionDefault ()
{
    $this->template->rules = $this->db->table('rules')->where('active', 1)->where('typ', 1);
}

Nebo to ještě napojit přes Model viz komentář předemnou.

Šablona

{block content}
  <table>
    <thead>
      <tr>
        <th>ID</th>
        <th>Rule</th>
      </tr>
    </thead>
	<tbody>
      {foreach $rules as $rule}
        <tr>
          <td><a n:href="rule, id => $rule->id">{$rule->id}</a></td>
          <td>{$rule->rule}</td>
        </tr>
	  {/foreach}
    </tbody>
  </table>
{/block content}

Edit: Doplněno $this.

Editoval CZechBoY (20. 11. 2015 18:12)

Altimit
Člen | 82
+
0
-

nevím proč, ale furt mi to hází chybu, že nezná proměnou databázi přesněji

Undefined variable: database

a ukazuje to na to, že neví co ta database je a přitom ji mám v configu definovanou
kod v presenteru:

class RulesPresenter extends BasePresenter {
    public $database;

    public function actionDefault ()
    {
        $db = $database;
        $this->template->rules = $db->table('rules')->where('typ', 1);
    }
}

a databese v config.local.neon

database:
	dsn: 'mysql:host=127.0.0.1;dbname=portal'
	user: ******
	password: *******
	options:
		lazy: no

default.latte v rules

{block content}

<h2 n:block=title>Všechny pravidla portálu!</h2>
<hr><br>
<tbody>
    {foreach $rules as $rule}
    <tr>
        <td><a n:href="rule, id => $rule->id">{$rule->id}</a></td>
        <td>{$rule->rule}</td>
    </tr>
    {/foreach}
</tbody>
{/block}
iguana007
Člen | 970
+
+2
-

Chybi ti tam $this→ …

class RulesPresenter extends BasePresenter {
    public $database;

    public function actionDefault ()
    {
        $db = $this->database;
        $this->template->rules = $db->table('rules')->where('typ', 1);
    }
}
Altimit
Člen | 82
+
0
-

Děkuji už mi to funguje ^^ a naučil jsem se další věc (s tím routrovanim si budu muset potom pohrát) zatím to mám hozeno do templates/Rules/<server>