PDA

View Full Version : ایجاد گرید ویو php



mosavi7
یک شنبه 21 اردیبهشت 1393, 10:38 صبح
با سلام و عرض ادب
دو روزی هست دارم رو این کلاس گرید ویو کار میکنم اما هنوز هم نتونستم تکمیلش کنم :


class Grid {
public $table , $query , $custom_field;
function __construct( $nametable , $query , $custom) {
$this->table = $nametable;
$this->query = $query ;
$this->custom_field = $custom ;


$grid = "<table border='1' width='80%'><tr>";
$arr = "";

foreach ( $this->table as $name => $value ) {
$grid .= "<td>$value</td>";
$arr [] = $name;
}
$implode = implode ( ' , ', $arr );

if($this->custom_field == "true"){$grid .="<td>دستورات</td>";}

$grid .= "</tr><tr>";
$result = DB::GetAll ( "SELECT $implode FROM ". $this->query );
foreach ( $result as $name ) {
foreach ( $name as $value ) {
$grid .= "<td>$value</td>";
}

if($this->custom_field == "true")
{
$grid .="<td>
<a href='aaa'><button>حذف</button></a>
<a href='aaa'><button>ویرایش</button></a>
</td>";
}

$grid .= "</tr>";
}


$grid .= "</table>";
echo $grid;
}
}







$showUsers = new Grid(
array("name"=>"نام" , "email"=>"ایمیل")
,"users"
,"true"
,array("id", "pass")
);

plague
یک شنبه 21 اردیبهشت 1393, 18:15 عصر
خب دقیقا مشکلت چیه !!؟
به نظر میاد توی کلاست تابع کانستراکت 3 تا آرگومان دریافت میکنه ولی توی مثال 4 تا آرگومان فررستاده

mosavi7
دوشنبه 22 اردیبهشت 1393, 11:55 صبح
خب دقیقا مشکلت چیه !!؟
به نظر میاد توی کلاست تابع کانستراکت 3 تا آرگومان دریافت میکنه ولی توی مثال 4 تا آرگومان فررستاده

میخوام یه ارایه برای فیلد های که نمیخوام تو لیست بیان داشته باشم .
چطور میتونم این دستور شرطی رو بنویسم و دقیقا کجا قرارش بدم که فیلدهای hidein تو لیست نباشه ...

plague
دوشنبه 22 اردیبهشت 1393, 18:58 عصر
وقتی موارد رو از دیتابیس میخونی و نمایش میدی
در هنگام چاپشون با حلقه مگه نمیتونی متوجه بشی ماله کدوم فیلد دیتابیس هستن ؟

من نمیدونم چه سیستم - کلاسی داری استفاده داری میکنی برای دیتبایست ولی اینجا تو حلقه دوم



$result = DB::GetAll ( "SELECT $implode FROM ". $this->query );
foreach ( $result as $name ) {
foreach ( $name as $value ) {
$grid .= "<td>$value</td>";
}
باید وقتی value رو چاپ میکنی همون لحظه باید بتونی بفهمی که ماله کدوم فیلده


حلقه دوم رو اینجوری بنویس



foreach ( $name as $fild=>$value ) {
$grid .= "<td> $fild -> $value </td>";
}

ببین جواب میده یا نه و نام فیلد رو علاوه بر مقدار باید بنویسه


در این صورت بقیه کار سادست
یه آرایه میدی به کلاست از فیلد های یکه نمیخای نمایش داده بشن و در این مرحله چک میکنی اگه فیلد توی آرایه بود نمایش نمیده

mosavi7
پنج شنبه 25 اردیبهشت 1393, 12:34 عصر
با سلام خدمت دوست عزیز
الحمدلله اون مشکل حل شد , الان یه مشکل دارم : چطور میتونم این دو تا آرایه رو با هم مقایسه کنم و کلیدهای که تکراری هست رو حذف کنم ؟؟


<?php
$arry1 = array("id"=>"1","username"=>"amir","pass"=>"1010");
$arry2 = array("id","pass");
?>

numberone1
پنج شنبه 25 اردیبهشت 1393, 15:08 عصر
میتونی بزاری تو 2 تا حلقه foreach چک کنی نک نک کلید ها رو
میتونی از تابع array_key_exists() (http://php.net/manual/en/function.array-key-exists.php) استفاده کنی
با تابع array_key هم میتونی کلید هارو مقابشه کنی
شاید راه های بیشتری هم باشه

plague
پنج شنبه 25 اردیبهشت 1393, 17:49 عصر
$ar3 = $arry1+$arry2;

mosavi7
جمعه 26 اردیبهشت 1393, 09:45 صبح
میتونی بزاری تو 2 تا حلقه foreach چک کنی نک نک کلید ها رو
میتونی از تابع array_key_exists() (http://php.net/manual/en/function.array-key-exists.php) استفاده کنی
با تابع array_key هم میتونی کلید هارو مقابشه کنی
شاید راه های بیشتری هم باشه

سلام هر دوی این تابع ها رو قبلا تست گرفتم , هیچ کدوم جواب نداده - چون آرایه $arry2 مقدار نداره سخت میشه مقایسشون کرد .
تابعی هست که بیاد یه مقدار کلید های آرایه $arry2 بده ؟



$ar3 = $arry1+$arry2;

این که تابع ها رو جمع میکنه , چطوری میشه مقایسشون کنم ...

MRmoon
جمعه 26 اردیبهشت 1393, 11:21 صبح
من کلاس شما رو اینجوری تغییر دادم:


class Grid {
protected $labels;
protected $fields;
protected $results;
function __construct($tableOrQuery, array $fields) {
$this->labels = array_values($fields);
$this->fields = array_keys($fields);
$binds = array();
if(is_array($tableOrQuery)) {
$q = $tableOrQuery[0];
$binds = @ $tableOrQuery[1];
} else {
$q = "SELECT " . implode(',', $this->fields) . " FROM $tableOrQuery";
}
$this->results = Db::GetAll($q, $binds);
}

function show()
{
ob_start();
echo "<table class='grid'>" . PHP_EOL;
echo "<tr class='grid-labels'>" . PHP_EOL;
foreach ($this->labels as $label) {
echo "<th>$label</th>" . PHP_EOL;
}
echo "</tr>" . PHP_EOL;

foreach ($this->results as $result) {
echo "<tr class='grid-row'>" . PHP_EOL;
foreach ($result as $res) {
echo "<td>$res</td>" . PHP_EOL;
}
echo "</tr>" . PHP_EOL;
}

echo "</table>" . PHP_EOL;

return ob_get_clean();
}
}
$showUsers = new Grid(
'test', // Table Name Or Query
array(
'c1' => 'Column 1',
'c2' => 'Column 2',
'c3' => 'Column 3',
'c4' => 'Column 4',
'c5' => 'Column 5',
'c6' => 'Column 6',
'c7' => 'Column 7',
'c8' => 'Column 8',
) // Columns for show and their labels.
);

echo $showUsers->show();

خیلی قشنگ هم کار می کنه.

شما یه کاستوم فیلدز اضافه داشتی که اونم میشه راحت اضافه کرد.

بعد با این هم میشه کویری داد به کلاس هم اسم تیبل.

mosavi7
شنبه 27 اردیبهشت 1393, 19:22 عصر
با سلام خدمت دوست عزیز
الحمدلله اون مشکل حل شد , الان یه مشکل دارم : چطور میتونم این دو تا آرایه رو با هم مقایسه کنم و کلیدهای که تکراری هست رو حذف کنم ؟؟


<?php
$arry1 = array("id"=>"1","username"=>"amir","pass"=>"1010");
$arry2 = array("id","pass");
?>




ممنون از دوستان عزیز
الان تنها مشکل من تو اینجا اینه نمی تونم این دوتا آرایه رو با هم مقایسه کنم ...!؟