# زبان های اسکریپتی > PHP > CodeIgniter >  ایجاد دسته بندی مطالب

## dddd10

سلام
ارسال-حذف-ویرایش مطلب در سایت را یادگرفتم. اگر بخوام چندین دسته مختلف در سایت ایجاد کنم تا قبل از ارسال مطلب مشخص کنم کدام دسته بندی ذخیره بشه کد نویسیش رو کمکم میکنید؟

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

content
-id
-title
-fullcontent

category
-id
-id_content
-title

----------


## vistacali

سلام  من برای  دسته بندی  مطالبم در  طراحی  چه با 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

میشه یک نمونه کد بزارین برای insert کردن مطلب دخل دسته بندی برنامه نویسی وب یا هرچیزی که بشه توی مثال مشخص کرد. ممنونم

----------


## dddd10

لطفا پاسخ بدین نتونستم مشکلمو حل کنم

----------


## pary_daryayi

شما در کنترلری که قراره فایل 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

سلام

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

----------


## pary_daryayi

شما گفتید حذف ، ویرایش و ... رو یاد گرفتید . 
این هم شبیه بقیه ست .
شما احتمالا تو فولدر مدل برای هر 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

حقیقتش با 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

کد view رو باید اینطور تغییر بدید .

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


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

----------


## dddd10

خطاهای زیر داده میشه




> *A PHP Error was encountered*Severity: Notice
> Message: Undefined variable: test
> Filename: views/content.php
> Line Number: 4
> 
> *A PHP Error was encountered*Severity: Warning
> Message: Invalid argument supplied for foreach()
> Filename: views/content.php
> 
> Line Number: 4

----------


## pary_daryayi

اسم فایل مدل model_section.php :

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

----------


## dddd10

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

----------


## pary_daryayi

فرم  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

بله اطلاعات داخل view نمایش داده شد.

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

----------


## pary_daryayi

شما تو کدایگنایتر میتونید ، تو قسمت 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

پریا خانم، کنترلر کد دومی که دادین چی میشه؟ باید دوتا دستور where گذاشت درسته؟ اولین نام آیدی category را برگردونه و دومی تمام فیلدهارو نمایش بده؟

----------


## pary_daryayi

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

----------


## dddd10

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

----------


## pary_daryayi

این کدها رو من قبلا تو اولین برنامه ام نوشتم ، ببینید و ایده بگیرید .
با این فرض که شما قسمت لیست شدن مطالب رو نوشتید و حالا میخواید روی دکمه ی 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();
             } 
?>

----------

