Перейти к содержимому


Фото
- - - - -

Изменить значение в админке

simpla form input

  • Чтобы отвечать, сперва войдите на форум
10 ответов в теме

#1 n1c

n1c
  • Пользователь
  • 262 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 25.12.2019 - 21:01

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

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

 

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}" />


Изменено: n1c, 25.12.2019 - 21:04


#2 shooroop

shooroop
  • Фрилансер
  • 1 026 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Antarktida

Опубликовано 25.12.2019 - 21:20

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

 

 

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

 

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

 

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



#3 n1c

n1c
  • Пользователь
  • 262 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 26.12.2019 - 12:39

в 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');
    }
    
}

?>


#4 phukortsin

phukortsin
  • Фрилансер
  • 1 014 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 26.12.2019 - 12:58

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

 

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

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

{

...

}

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

 

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



#5 n1c

n1c
  • Пользователь
  • 262 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 26.12.2019 - 13:03

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

 

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

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

{

...

}

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

 

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

 

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



#6 phukortsin

phukortsin
  • Фрилансер
  • 1 014 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 26.12.2019 - 13:06

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



#7 n1c

n1c
  • Пользователь
  • 262 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 26.12.2019 - 13:09

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

 

в 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}



#8 phukortsin

phukortsin
  • Фрилансер
  • 1 014 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 26.12.2019 - 14:48

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

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

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

 

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



#9 n1c

n1c
  • Пользователь
  • 262 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 26.12.2019 - 15:10

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

<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}" />

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



#10 phukortsin

phukortsin
  • Фрилансер
  • 1 014 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 26.12.2019 - 15:12

Это тоже неверно...



#11 n1c

n1c
  • Пользователь
  • 262 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 26.12.2019 - 15:23

Это тоже неверно...

 

:blink:

<input name="new[name][]"         type="text"   value="{$new->name|escape}" /> ?

тоже не работает







Также с меткой «simpla, form, input»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых