ورود

View Full Version : ایجاد دسته بندی مطالب



dddd10
جمعه 04 مهر 1393, 12:56 عصر
سلام
ارسال-حذف-ویرایش مطلب در سایت را یادگرفتم. اگر بخوام چندین دسته مختلف در سایت ایجاد کنم تا قبل از ارسال مطلب مشخص کنم کدام دسته بندی ذخیره بشه کد نویسیش رو کمکم میکنید؟

جدول هاشو بلدم:

content
-id
-title
-fullcontent

category
-id
-id_content
-title

vistacali
جمعه 04 مهر 1393, 16:55 عصر
سلام من برای دسته بندی مطالبم در طراحی چه با asp.net , و چه با code iginiter اومدم کلا جدولهای ورودپرس رو برسی کردک دیدم خوب و دقیق هرکاری رو انجام میده شکل چدول دسته بندی مطالب به این شکل میشه



123922



نگاه هر دسته یا خودش والد هست و یا پدر و یا پدرانی داره دسته ها همه در جدول term هستن اگر بدون والد باشه که پدرش رو من 0 در نظر میگرفتم یعنی در جدول termtaxonomy فیلد ستون parent رو 0 پر میکنم در غیر این صورت ایدی پدر رو بهش میدم

یه مثلا ساده
id category parent
0 اموزشی 1
1 برنامه نویسی وب 2
1 برنامه نویسی ویندوز 3
2 پی اچ پی 4
و الی اخر



حالا نحوه ذخیره کرده که یه دستور insert هست که طبق فرمایش خودتون بلدی
نحوه select هم به این صورت هست و دخیره مطلب با دسته پی اچ پی اینه که ایدی term رو ذخیره کن و موقع فراخونی که بخواهیی پست رو نمایش بدی بر اساس ایدی term موجود در جدول پست ها به جدول termtaxonomy یک select بزن و خود دسته و پدرش رو برگردون

dddd10
جمعه 04 مهر 1393, 21:03 عصر
میشه یک نمونه کد بزارین برای insert کردن مطلب دخل دسته بندی برنامه نویسی وب یا هرچیزی که بشه توی مثال مشخص کرد. ممنونم

dddd10
شنبه 05 مهر 1393, 21:42 عصر
لطفا پاسخ بدین نتونستم مشکلمو حل کنم

pary_daryayi
دوشنبه 07 مهر 1393, 09:36 صبح
شما در کنترلری که قراره فایل view برای درج مطلب رو نشون بده ، باید تمام دسته ها را ارسال کنید .
اول اینو انجام بدید ، بعد بقیه شو بگم .


$data['data'] = $this->model_section->get_subsection();
$this->_out('admin','article','pageArticle',$data);

مدل section همون category شماست .
توی select,option از فایل view ، آیدی های category میشن value و نام category ها میشن label


<select name="Section">
<?php foreach($data as $row){ ?>
<option value="<?php echo $row->section_id ;?>"><?php echo $row->title ;?></option>
<?php }?>
</select>

dddd10
دوشنبه 07 مهر 1393, 15:39 عصر
سلام

میشه کامل تر توضیح بدین؟ تو فولدر Model چه کدی بنویسم براش؟
دستور _out کاربردش چیه؟ منقرض نشده توی نسخه جدید؟ ( داخل user_guide ننوشته بودن )

pary_daryayi
دوشنبه 07 مهر 1393, 17:21 عصر
شما گفتید حذف ، ویرایش و ... رو یاد گرفتید .
این هم شبیه بقیه ست .
شما احتمالا تو فولدر مدل برای هر table یک مدل نوشتید . درسته ؟
حالا برای مدل section یا همون category خودتون باید یک مدل نوشته باشید که یکی از متدهاش این باشه :





public function get_subsection(){
$data = $this->db->get('tb_section');
return $data->result();
}

به جای _OUT شما دستور load->view رو استفاده کنید :


$this->load->view('article/newArticle',$data)

dddd10
دوشنبه 07 مهر 1393, 18:52 عصر
حقیقتش با model مشکل دارم. خیلی وقت پیش هم داشتم تمرین میکردم ولی باز همین مشکلو داشتم. کدهامو ببینید:

Controller

public function index(){ $this->load->model('section_model'); $data['test'] = $this->section_model->get_category_content(); $this->load->view('content',$data); }

Model

class section_model extends CI_Model{
function get_category_content(){ $data = $this->db->get('category'); return $data->result(); }

View

<?phpforeach($data->result() as $row){
echo $row->id;}
?>

pary_daryayi
دوشنبه 07 مهر 1393, 19:28 عصر
کد view رو باید اینطور تغییر بدید .


<?php foreach($test as $row)
{echo $row->id;}?>


چون اطلاعات از کنترلر به view ارسال میشن . الان اینو بنویسید ببینید خروجی صحیحه یا نه ؟

dddd10
دوشنبه 07 مهر 1393, 20:14 عصر
خطاهای زیر داده میشه


A PHP Error was encounteredSeverity: Notice
Message: Undefined variable: test
Filename: views/content.php
Line Number: 4

A PHP Error was encounteredSeverity: Warning
Message: Invalid argument supplied for foreach()
Filename: views/content.php

Line Number: 4

pary_daryayi
سه شنبه 08 مهر 1393, 11:14 صبح
اسم فایل مدل model_section.php :


<?php
class Model_section extends CI_Model
{
public function get_all(){
$data = $this->db->get('tb_section');
return $data->result();
}
}

dddd10
سه شنبه 08 مهر 1393, 15:05 عصر
خطاها رفع شد
میخوام جدول content را نمایش بدم که فیلدهای ( id, category_id , title, content ) شامل میشه. category_id مربوط به جدول دسته بندی ها میشه
model این قسمت چی میشه؟ توی php عادی چندین بار نوشتم اما از روزی که CI تمرین میکنم همه چیزو قاطی کردم

pary_daryayi
سه شنبه 08 مهر 1393, 15:10 عصر
فرم view مربوط به content رو درست کردید ؟ باید دسته هایی که میخونید رو به درستی تو سلکت آپشن نمایش بدید اول .


<select name="Section">
<?php foreach($data as $row){ ?>
<option value="<?php echo $row->section_id ;?>"><?php echo $row->title ;?></option>
<?php }?>
</select>

اگه اینو درست کردید حالا اطلاعات رو از این فرم به کنترلر بفرستید و بعد برید سراغ کدنویسی مدل

dddd10
سه شنبه 08 مهر 1393, 15:52 عصر
بله اطلاعات داخل view نمایش داده شد.

توی پنل مدیریت تمام پست ها نمایش داده بشه ( این مورد که ساده هست )، ولی چون جدول مطالب فیلدی بنام category_id داره که فقط آیدی دسته بندی را داخلش ذخیره میکنم اگر get کنم نمایش پست هارو، فیلد مربوط به دسته بندی رو هم به شکل عدد نشون میده ( آیدی 2 و... ). چطوری توی مدیریت بجای نمایش آیدی ذخیره شده داخل جدول مطالب؛ نام اصلی دسته بندی از جدول category را ارسال کنم؟

pary_daryayi
سه شنبه 08 مهر 1393, 17:13 عصر
شما تو کدایگنایتر میتونید ، تو قسمت view هم به مدل دسترسی داشته باشید .
اونجایی که بهتون عدد میده ، یکی از متدهای مدل section رو به این صورت فراخوانی میکنید :


$this->model->selectId($category_id)


این رو هم در مدل section باید داشته باشید


public function selectId($id){
$this->db->where('section_id',$id);
$result = $this->db->get('tb_section');
return $result->result();
}

dddd10
سه شنبه 08 مهر 1393, 20:58 عصر
پریا خانم، کنترلر کد دومی که دادین چی میشه؟ باید دوتا دستور where گذاشت درسته؟ اولین نام آیدی category را برگردونه و دومی تمام فیلدهارو نمایش بده؟

pary_daryayi
چهارشنبه 09 مهر 1393, 07:59 صبح
الان شما دارید مدیریت رو درست میکنید یا قسمت کاربری ؟
اگه تو قسمت مدیریت هستید که ابتدا لیستی از content رو با نمایش فیلدهایی مثل title , date و ... نشون میدید ، بعد احتمالا روی دکمه ی edite کلیک میکنید تا مشخصات بیشتر اون رو نمایش بدید . درسته ؟
از این به بعد رو مشکل دارید ؟ که section اون مطلب و بقیه ی فیلدهاش رو چطور نشون بدید ؟

dddd10
چهارشنبه 09 مهر 1393, 09:45 صبح
بله. البته فیلم برای ویرایش و حذف کردن پیدا کردم اما توی اون فیلم فقط یدونه جدول news بود و مثل الان جدولی برای ایجاد دسته بندی و جدول ارسال مطالب وجود نداشت. من میخوام وقتی کاربر ویرایش را زد، بجای اینکه از جدول content فیلد id_category را نمایش بده ( مثلا 2 ) ، نام دسته بندی را بنویسه ( که 2 در جدول category اینترنت هست ).

pary_daryayi
چهارشنبه 09 مهر 1393, 11:31 صبح
این کدها رو من قبلا تو اولین برنامه ام نوشتم ، ببینید و ایده بگیرید .
با این فرض که شما قسمت لیست شدن مطالب رو نوشتید و حالا میخواید روی دکمه ی edit کلیک کنید

کنترلر :


public function editArticle(){
$data = $this->model_article->selectId();
foreach ($data as $row){
$data['id'] = $row->article_id;
$data['sid'] = $row->ection_id;
$data['topic'] = $row->topic;
$data['keywords'] = $row->keywords;
$data['summery'] = $row->summery;
$data['content'] = $row->content;
$data['writer'] = $row->writer;
}
$data['sdata'] = $this->model_section->get_subsection();
$this->_out('admin','article','editArticle',$data);
}



مدل article و متد selectId :


public function selectId(){
$id = $this->uri->segment(4);
$this->db->where('article_id',$id);
$this->db->order_by("article_id", "DESC");
$result = $this->db->get('mblog_article');
return $result->result();
}


قسمتی از مدل section و متد get_subsection



public function get_subsection(){
$data = $this->db->get('mblog_section');
return $data->result();
}


VIEW: مربوط به editArticle


<?php echo validation_errors();
echo form_open_multipart('admin/manage_article/updateArticle');
echo form_hidden('id',$id);
?>
<table border="0" style="text-align:right">
<tr >
<td><span>عنوان :</span></td>
<td><?php
echo form_input('Topic',$topic);
?></td>
</tr>
<tr>
<td><span>کلمات کلیدی :</span></td>
<td><?php echo form_input('Keywords',$keywords);?></td>
</tr>
<tr>
<td><span>بخش</span></td>
<td>
<select name="Section">
<?php foreach($sdata as $row){ ?>
<option value="<?php echo $row->section_id ;?>" <?php if($sid==$row->section_id){?> selected="selected" <?php }?>>
<?php echo $row->title ;?></option>
<?php }?>
</select>
</td>
</tr>
<tr>
<td><span>تصویر :</span></td>
<td><input type="file" name="userfile" size="20"/></td>
</tr>
<tr>
<td><span>چکیده :</span></td>
<td>
<?php echo form_textarea('Summery',$summery,'class="redactor"');?>
</td>
</tr>
<tr>
<td><span>متن :</span></td>
<td>
<?php echo form_textarea('Content',$content,'class="redactor"');?>
</td>
</tr>
<tr>
<td></td>
<td><?php echo form_submit('Submit','ویرایش','class="submit"');?></td>
</tr>
</table>
<?php echo form_close();
}
?>