Jump to content

Recommended Posts

Привет, Друзья!

Столкнулся с проблемой. При заполнении формы на сайте, нужна возможность редактирования ее в админке.

 

NewView.php

<?PHP
 
require_once('View.php');

class NewView extends View
{
	function fetch()
	{
		$new = new stdClass;
		
		if($this->request->method('post') && $this->request->post('new')) {
            $new = new stdClass();
            $new->phone        = $this->request->post('phone');
            $new->name         = $this->request->post('name');
            $new->form_1         = $this->request->post('form_1');
            $new->form_2         = $this->request->post('form_2');
            $new->form_3         = $this->request->post('form_3');

			$this->design->assign('name', $new->name);

            //$new_id = $this->news->add_new($new);

			if($new_id = $this->news->update_new($new_id, array('name'=>$new->name, 'email'=>$new->email)))
			{
				$this->new = $this->users->get_new(intval($new_id));
				$this->design->assign('name', $new->name);
				$this->design->assign('email', $new->email);				
			}
			else
				$this->design->assign('error', 'unknown error');
			
			
				
			// Отправляем email
            $this->news->email_new_admin($new_id);
		}

		if($this->page)
		{
			$this->design->assign('meta_title', $this->page->meta_title);
			$this->design->assign('meta_keywords', $this->page->meta_keywords);
			$this->design->assign('meta_description', $this->page->meta_description);
		}

		$body = $this->design->fetch('new.tpl');
		
		return $body;
	}
}

 

api/New.php

<?php

require_once('Simpla.php');

class News extends Simpla {
    
    public function get_new($id) {
        $query = $this->db->placehold("SELECT 
                c.id, 
                c.name,  
				c.ip,
				c.form_1,
				c.form_2,
				c.form_3,
                c.processed 
            FROM __news c 
            WHERE id=? 
            LIMIT 1
        ", intval($id));
        
        if($this->db->query($query)) {
            return $this->db->result();
        } else {
            return false;
        }
    }
    
    public function get_news($filter = array(), $new_on_top = false) {
        // По умолчанию
        $limit = 1000;
        $page = 1;
        $processed = '';
        
        if(isset($filter['limit'])) {
            $limit = max(1, intval($filter['limit']));
        }
        
        if(isset($filter['page'])) {
            $page = max(1, intval($filter['page']));
        }
        
        if(isset($filter['processed'])) {
            $processed = $this->db->placehold('AND processed=?',$filter['processed']);
        }
        
        $sql_limit = $this->db->placehold(' LIMIT ?, ? ', ($page-1)*$limit, $limit);
        
        if($new_on_top) {
            $sort='DESC';
        } else {
            $sort='ASC';
        }
        
        $query = $this->db->placehold("SELECT 
                c.id, 
                c.name, 
				c.ip,
				c.form_1,
				c.form_2,
				c.form_3,
                c.processed	
            FROM __news c 
            WHERE 
                1 
                $processed 
            ORDER BY c.id 
            $sort 
            $sql_limit
        ");
        
        $this->db->query($query);
        return $this->db->results();
    }
    
    public function add_new($new) {
        $query = $this->db->placehold('INSERT INTO __news SET ?%, date = NOW()', $new);
        
        if(!$this->db->query($query)) {
            return false;
        }
        
        $id = $this->db->insert_id();
        return $id;
    }
    
    public function update_new($id, $new) {

        $query = $this->db->placehold("UPDATE __news SET ?% $date_query WHERE id in(?@) LIMIT 1", $new, (array)$id);
        $this->db->query($query);
        return $id;
    }
    
    public function delete_new($id) {
        if(!empty($id)) {
            $query = $this->db->placehold("DELETE FROM __news WHERE id=? LIMIT 1", intval($id));
            $this->db->query($query);
        }
    }
    
}

 

simpla/NewAdmin.php

<?php

require_once('api/Simpla.php');

class NewsAdmin extends Simpla {
    
    public function fetch() {
		$new = new stdClass;
		if(!empty($_POST['new_info']))
		{
			$new->id = $this->request->post('id', 'integer');
			$new->enabled = $this->request->post('enabled');
			$new->name = $this->request->post('name');
			$new->email = $this->request->post('email');
	
			## Не допустить одинаковые email пользователей.
			if(empty($new->name))
			{			
				$this->design->assign('message_error', 'empty_name');
			}
			elseif(empty($new->email))
			{			
				$this->design->assign('message_error', 'empty_email');
			}
			elseif(($u = $this->news->get_new($new->email)) && $u->id!=$new->id)
			{			
				$this->design->assign('message_error', 'login_existed');
			}
			else
			{
				$new->id = $this->news->update_new($new_id, $new);
  				$this->design->assign('message_success', 'updated');
   	    		$new = $this->news->get_new(intval($new_id));
			}
		}
		elseif($this->request->method('post')) {
            // Действия с выбранными
            $ids = $this->request->post('check');
            if(!empty($ids)) {
                switch($this->request->post('action')) {
                    case 'delete': {
                        foreach($ids as $id) {
                            $this->news->delete_new($id);
                        }
                        break;
                    }
                    case 'processed': {
                        foreach ($ids as $id) {
                            $this->news->update_new($id, array('processed'=>1));
                        }
                        break;
                    }
                }
            }
        }
        
        // Отображение
        $filter = array();
        $filter['page'] = max(1, $this->request->get('page', 'integer'));
        $filter['limit'] = 200;
        
        
        //$news_count = $this->news->count_news($filter);
        // Показать все страницы сразу
        if($this->request->get('page') == 'all') {
            $filter['limit'] = $news_count;
        }
        
        $news = $this->news->get_news($filter, true);
        
        $this->design->assign('pages_count', ceil($news_count/$filter['limit']));
        $this->design->assign('current_page', $filter['page']);
        
        $this->design->assign('news', $news);
        $this->design->assign('news_count', $news_count);
        
        return $this->design->fetch('news.tpl');
    }
    
}

?>

 

 

в базу передает, все работает, но в админке не могу отредактировать, чтобы сохранило в базу новое значение  :unsure:

<input name="name" class="simpla_inp " type="text" value="{$new->name|escape}" />

Edited by n1c
Link to post
Share on other sites

в simpla/NewAdmin.php  заменить  if(!empty($_POST['new_info']))  на   if($this->request->method('post'))

 

 

 далее по коду  убрать непонятно что

 

elseif($this->request->method('post')) {
// Действия с выбранными

 

и закрывашку }

Link to post
Share on other sites

в simpla/NewAdmin.php  заменить  if(!empty($_POST['new_info']))  на   if($this->request->method('post'))

 

 

 далее по коду  убрать непонятно что

 

elseif($this->request->method('post')) {

// Действия с выбранными

 

и закрывашку }

 

не помогло(((

 

вот сейчас мой код в /simpla/NewsAdmin.php

<?php

require_once('api/Simpla.php');

class NewsAdmin extends Simpla {
    
    
    public function fetch() {
		//$new = new stdClass;
		if($this->request->method('post'))
		{
			$new->id = $this->request->post('id', 'integer');
			$new->enabled = $this->request->post('enabled');
			$new->name = $this->request->post('name');
			$new->email = $this->request->post('email');
	
			## Не допустить одинаковые email пользователей.
			if(empty($new->name))
			{			
				$this->design->assign('message_error', 'empty_name');
			}
			elseif(empty($new->email))
			{			
				$this->design->assign('message_error', 'empty_email');
			}
			elseif(($u = $this->news->get_new($new->email)) && $u->id!=$new->id)
			{			
				$this->design->assign('message_error', 'login_existed');
			}
			else
			{
				$new->id = $this->news->update_new($new_id, $new);
  				$this->design->assign('message_success', 'updated');
   	    		$new = $this->news->get_new(intval($new_id));
			}
		}
        
        // Отображение
        $filter = array();
        $filter['page'] = max(1, $this->request->get('page', 'integer'));
        $filter['limit'] = 200;
        
        
        //$news_count = $this->news->count_news($filter);
        // Показать все страницы сразу
        if($this->request->get('page') == 'all') {
            $filter['limit'] = $news_count;
        }
        
        $news = $this->news->get_news($filter, true);
        
        $this->design->assign('pages_count', ceil($news_count/$filter['limit']));
        $this->design->assign('current_page', $filter['page']);
        
        $this->design->assign('news', $news);
        $this->design->assign('news_count', $news_count);
        
        return $this->design->fetch('news.tpl');
    }
    
}

?>
Link to post
Share on other sites

Похоже, у Вас все сильно напутано.

 

Что касается последнего фрагмента кода, то в нем первая часть

if($this->request->method('post'))

{

...

}

должна быть в /simpla/NewAdmin.php, а вторая - в /simpla/NewsAdmin.php.

 

Смотрите, как сделано стандартно в Simpla (например, при редактировании брендов) и действуйте по образцу...

Link to post
Share on other sites

Похоже, у Вас все сильно напутано.

 

Что касается последнего фрагмента кода, то в нем первая часть

if($this->request->method('post'))

{

...

}

должна быть в /simpla/NewAdmin.php, а вторая - в /simpla/NewsAdmin.php.

 

Смотрите, как сделано стандартно в Simpla (например, при редактировании брендов) и действуйте по образцу...

 

у меня только один файл NewsAdmin.php (я выше забыл добавить s в News)

Link to post
Share on other sites

А если у Вас так нестандартно, то надо бы и шаблон показывать...

 

в simpla/design/news.tpl

 

{* Вкладки *}
{capture name=tabs}
    {if in_array('comments', $manager->permissions)}<li><a href="index.php?module=CommentsAdmin">Комментарии</a></li>{/if}
	<li class="active"><a href="index.php?module=NewsAdmin">Анкета</a></li>
{/capture}

{* Title *}
{$meta_title='Анкета' scope=parent}

<div id="header">
	{if $news_count}
	<h1>{$news_count} {$news_count|plural:'заявка':'заявки':'заявок'}</h1> 
	{else}

	{/if}
</div>

<div id="main_list">


	<form method="post" action="{url module=ExportnewsAdmin}" target="_blank">
	<input type="hidden" name="session_id" value="{$smarty.session.id}">
	<input type="image" src="./design/images/export_excel.png" name="export" title="Экспортировать">
	</form><br><br>


    {include file='pagination.tpl'}
    {if $news}
        <form id="list_form" method="post">
            <input type="hidden" name="session_id" value="{$smarty.session.id}"/>
            <div id="list" class="sortable">
                {foreach $news as $new}
                    <div class="{if !$new->processed}unapproved{/if} row">
                        <div class="checkbox cell">
                            <input type="checkbox" id="{$new->id}" name="check[]" value="{$new->id}"/>
                            <label for="{$new->id}"></label>
                        </div>
                        <div class="name cell">
                            <div class='comment_name'>
                                {$new->name|escape}
                                <a class="approve" href="#">Обработать</a>
                            </div>
							
				
<style>
{literal}
table, td, th {  
  border: 1px solid #ddd;
  text-align: left;
}

table {
  border-collapse: collapse;
  width: 100%;
}

th, td {
  padding: 15px;
}
{/literal}c
</style>

<table>
  <tr>
    <th>Вопрос</th>
    <th>Ответ</th>
  </tr>
  <tr>
    <td>{$settings->forms_news_1|escape}</td>
    <td><input name="name" class="simpla_inp " type="text" value="{$new->name|escape}" /></td>
  </tr>
  <tr>
    <td>{$settings->forms_news_2|escape}</td>
    <td>
		<input name="form_1" class="" type="text" value="{$new->form_1|escape|nl2br}" />.
		<input name="form_2" class="" type="text" value="{$new->form_2|escape|nl2br}" />.
		<input name="form_3" class="" type="text" value="{$new->form_3|escape|nl2br}" />
	</td>
  </tr>
  <tr>
    <td>Заявка отправлена</td>
    <td>{$new->date|date} в {$new->date|time}</td>
  </tr>
</table>

                        </div>
                        <div class="icons cell">
                            <a href='#' title='Удалить' class="delete"></a>
                        </div>
                        <div class="clear"></div>
                    </div>
                {/foreach}
            </div>

            <div id="action">
                <label id='check_all' class='dash_link'>Выбрать все</label>
                <span id=select>
                <select name="action">
                    <option value="processed">Отметить как обработанные</option>
                    <option value="delete">Удалить</option>
                </select>
                </span>
                <input id='apply_action' class="button_green" type=submit value="Применить">
            </div>
        </form>
    {else}
        Пусто
    {/if}
    {include file='pagination.tpl'}
</div>
{literal}
<script>
$(function() {

	// Раскраска строк
	function colorize()
	{
		$("#list div.row:even").addClass('even');
		$("#list div.row:odd").removeClass('even');
	}
	// Раскрасить строки сразу
	colorize();
	
	// Выделить все
	$("#check_all").click(function() {
		$('#list input[type="checkbox"][name*="check"]').attr('checked', $('#list input[type="checkbox"][name*="check"]:not(:checked)').length>0);
	});	

	// Удалить 
	$("a.delete").click(function() {
		$('#list input[type="checkbox"][name*="check"]').attr('checked', false);
		$(this).closest(".row").find('input[type="checkbox"][name*="check"]').attr('checked', true);
		$(this).closest("form").find('select[name="action"] option[value=delete]').attr('selected', true);
		$(this).closest("form").submit();
	});
	
	// Обработать
	$("a.approve").click(function() {
		var line        = $(this).closest(".row");
		var id          = line.find('input[type="checkbox"][name*="check"]').val();
		line.addClass('loading_icon');
		$.ajax({
			type: 'POST',
			url: 'ajax/update_object.php',
			data: {'object': 'new', 'id': id, 'values': {'processed': 1}, 'session_id': '{/literal}{$smarty.session.id}{literal}'},
			success: function(data){
				line.removeClass('loading_icon');
                line.removeClass('unapproved');
			},
			dataType: 'json'
		});	
		return false;	
	});
	
	// Подтверждение удаления
	$("form#list_form").submit(function() {
		if($('select[name="action"]').val()=='delete' && !confirm('Подтвердите удаление'))
			return false;	
	});

});

</script>
{/literal}

Link to post
Share on other sites

Так у Вас явно поля редактирования

<input name="form_1" class="" type="text" value="{$new->form_1|escape|nl2br}" />

неверно оформлены.

 

Смотрите в качестве примера, как стандартно на стр списка товаров в админке редактируются цены и кол-во товаров.

Link to post
Share on other sites

Так у Вас явно поля редактирования

<input name="form_1" class="" type="text" value="{$new->form_1|escape|nl2br}" />

неверно оформлены.

 

Смотрите в качестве примера, как стандартно на стр списка товаров в админке редактируются цены и кол-во товаров.

 

Вот поле для имени - <input name="name" class="simpla_inp " type="text" value="{$new->name|escape}" />

верно же оформлено, а все равно не работает(

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...