PDA

View Full Version : سوال: سؤالی در مورد بریدن حلقه در چاپ



ama-amir
سه شنبه 09 اسفند 1390, 19:19 عصر
سلام
دوستان من یه حلقه while دارم که حدود 200تا رکورد داره
من میخوام موقعی که کسی میخواد این صفحه که 200تا رکورد داره رو چاپ کنه بعد از هر 8 بار که حلقه
چاپ میشه ادامش تو صفحه بعدی چاپ بشه!
ممنون میشم کمکم کنید

Reza1607
سه شنبه 09 اسفند 1390, 20:59 عصر
@media print
{
.nextpage{page-break-after:always}
}

شما بايد اين سوال تو بخش css مي پرسيديد

حالا كدي رو كه دادم امتحان كنيد (مطمئن نيستم كه after درسته يا before تست كنيد
از هر كدوم از قسمت ها كه مي خواين اين شكسته شدن انجام بشه خصوصيت class اون قسمت رو nextpage قرار بدين

ama-amir
سه شنبه 09 اسفند 1390, 22:23 عصر
خوب من میخوام while رو بشکونم!
یعنی while به هشتمین مرحله که رسید
بگم بره صفحه بعدی
اینجوریه مشکلم:D

Nima0711
سه شنبه 09 اسفند 1390, 22:33 عصر
دوست عزیز ، سوال شما ایجاد pagenation است ، شما از دستور limit مای اس کیوال باید استفاده کنید

Reza1607
سه شنبه 09 اسفند 1390, 22:39 عصر
خوب من میخوام while رو بشکونم!
یعنی while به هشتمین مرحله که رسید
بگم بره صفحه بعدی
اینجوریه مشکلم:D

عذر مي خوام من كلمه چاپ رو ديدم حواسم رفت سر موضوع پرينتر
خوب همون جور كه دوستمون گفتن اين بحث شما بحث pagenation هست
شما بايد كوئري رو به اين صورت بنويسيد
SELECT * FROM tbl LIMIT 0,8

Nima0711
سه شنبه 09 اسفند 1390, 22:41 عصر
سوالتون خیلی واضح نیست لطفاً مشخص تر سوالتون رو بیان کنید . نمی دونم دقیقاً سوالتون چی هست ولی با استفاده از این دستور می تونید از حلقه خارج بشید


$i = 0 ;
while(TRUE)
{
if($i == 8)
break;
i++
}

ama-amir
چهارشنبه 10 اسفند 1390, 11:15 صبح
سلام
ممنون از جواباتون
بزارید دقیق بگم
ببینید من یه حلقه دارم که یه سری جدول مربعی رو echo میکنه!
این جدولا رو من میخوام با پرینتر پرینت بگیرم
وقتی print prevew رو میزنم بعضی از جدولام به آخر یه صفحه که میرسن نصفشون تو صفحه اوله نصفشون تو صفحه بعدیه!
من میخوام اینجوری باشه که این جدولا تو یه صفحه کامل بیوفتن و بعد برن ورق بعدی
فکر کنم از عکس زیر بفهمید مشکلم تو پرینتشون چیه:
http://img4up.com/up2/05416737347800838617.gif

MMSHFE
چهارشنبه 10 اسفند 1390, 12:28 عصر
دوست عزیز، این کد رو ببینید:


<!doctype html>
<html>
<head>
<title>Page Break DEMO</title>
<meta charset="utf-8"/>
<style type="text/css">
table {
page-break-after: always;
}
</style>
</head>
<body>
<?php
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
$data = mysql_query('SELECT * FROM `members` ORDER BY `id`');
if($data && mysql_num_rows($data) > 0) {
$colcount = 3;
$rowcount = 8;
$currentrow = 0;
$currentcol = 0;
while($item = mysql_fetch_assoc($data)) {
if($currentrow == 0) {
echo '<table border="1px" cellpadding="0px" cellspacing="0px" width="100%">'.PHP_EOL;
}
if($currentcol == 0) {
echo '<tr>'.PHP_EOL;
}
echo '<td width="'.ceil(100 / $colcount).'%">'.$item['contents'].'</td>'.PHP_EOL;
$currentcol++;
if($currentcol == $colcount) {
echo '</tr>'.PHP_EOL;
$currentcol = 0;
$current_row++;
if($current_row == $rowcount) {
echo '</table>'.PHP_EOL;
$currentrow = 0;
}
}
}
if($currentcol > 0) {
while($currentcol < $colcount) {
echo '<td>&nbsp;</td>'.PHP_EOL;
$currentcol++;
}
echo '</tr>'.PHP_EOL;
echo '</table>'.PHP_EOL;
}
}
?>
</body>
</html>

بجای خطی هم که نوشته:

echo '<td width="'.ceil(100 / $colcount).'%">'.$item['contents'].'</td>'.PHP_EOL;
هم کدی که محتوای هر خونه رو میسازه بگذارین. از اونجا که اطلاعات شما توی جدول ترسیم میشه و جدول هم 8 سطر داره و بعد از هر جدول هم گفتیم برش در صفحه ایجاد بشه، نتیجه ای که میخواین بدست میاد. موفق باشید.

ama-amir
چهارشنبه 10 اسفند 1390, 13:34 عصر
ممنون بابت کد
ولی مطمئنید هر 8 تا رکورد تو یه صفحه میاد؟
هر رکورد میره تو یه صفحه جدا!

MMSHFE
چهارشنبه 10 اسفند 1390, 13:57 عصر
فکر نمیکنم. حالا برای اطمینان، این کد رو تست کنید ببینید چطور میشه؟


<!doctype html>
<html>
<head>
<title>Page Break DEMO</title>
<meta charset="utf-8"/>
<style type="text/css">
.break {
page-break-after: always;
}
</style>
</head>
<body>
<?php
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
$data = mysql_query('SELECT * FROM `members` ORDER BY `id`');
if($data && mysql_num_rows($data) > 0) {
$colcount = 3;
$rowcount = 8;
$currentrow = 0;
$currentcol = 0;
while($item = mysql_fetch_assoc($data)) {
if($currentrow == 0) {
echo '<table border="1px" cellpadding="0px" cellspacing="0px" width="100%">'.PHP_EOL;
}
if($currentcol == 0) {
echo '<tr>'.PHP_EOL;
}
echo '<td width="'.ceil(100 / $colcount).'%">'.$item['contents'].'</td>'.PHP_EOL;
$currentcol++;
if($currentcol == $colcount) {
echo '</tr>'.PHP_EOL;
$currentcol = 0;
$current_row++;
if($current_row == $rowcount) {
echo '</table>'.PHP_EOL;
echo '<div class="break"></div>'.PHP_EOL;
$currentrow = 0;
}
}
}
if($currentcol > 0) {
while($currentcol < $colcount) {
echo '<td>&nbsp;</td>'.PHP_EOL;
$currentcol++;
}
echo '</tr>'.PHP_EOL;
echo '</table>'.PHP_EOL;
}
}
?>
</body>
</html>

ama-amir
چهارشنبه 10 اسفند 1390, 14:33 عصر
اون اولیه که دادید تو هر صفحه print preview یه رکورد رو میزاشت
این آخریه که دادید کامل همه صفحات رو پر میکنه!
نمیدونم چرا اینجوریه
خودتون هم تستش کردید؟

MMSHFE
چهارشنبه 10 اسفند 1390, 16:10 عصر
راستش اون قبلی رو نه ولی این رو تست کردم.

ama-amir
چهارشنبه 10 اسفند 1390, 21:09 عصر
قربان ممنون بابت زحمتی که کشیدید
من این کدی که دادید رو اجرا کردم
ولی 8تا تیبل تو print privew نیومد!
نیگاه کنید عکس زیرو:
http://img4up.com/up2/61597547290856831783.jpg
بازم بابت زحمت دادنتون عذر میخوام

MMSHFE
چهارشنبه 10 اسفند 1390, 21:24 عصر
خوب عزیز درست کار میکنه دیگه. الآن 8 سطر توی جدول داریم. اگه به صفحه بعد نگاه کنید، میبینید که رکوردهای 25 تا 32 اونجا اومده. یعنی هر 8 سطر توی یک صفحه هست. حالا اگه تعداد رو خواستین تغییر بدین، با استفاده از rowcount$ و colcount$ میتونید سطرها و ستونها رو تنظیم کنید. موفق باشید.

ama-amir
چهارشنبه 10 اسفند 1390, 22:34 عصر
عالیی بود
مشکلم حل شد ممنون

MMSHFE
پنج شنبه 11 اسفند 1390, 08:06 صبح
خواهش میکنم. دکمه تشکر رو هم برای اینجور مواقع گذاشتن :چشمک: