Перейти к содержанию
Официальный форум поддержки Simpla

Marketus

Пользователь
  • Публикаций

    13
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Marketus

  1. 1) Добавляем поле в таблицу бд "_pages" поле parent_id

    ALTER TABLE `имя таблицы` ADD `parent_id` INT( 11 ) NOT NULL AFTER `id`

    2) Добавляем в api/Pages.php (строка 30) 

    $query = "SELECT id, parent_id, url, header, name, meta_title, meta_description, meta_keywords, body, menu_id, position, visible
    

    3) Что бы в меню выводило только главные страницы, в шаблоне главной страницы находим

    {if $p->menu_id == 1}
    

    и заменям на 

    {if $p->menu_id == 1 && $p->parent_id == 0}

    4) Добавляем вывод контента подстраниц на главной ваш шаблон/main.tpl и на страницах остальных ваш шаблон/page.tpl

    {foreach $pages as $p}
    	{if $p->parent_id == $page->id}
    		{$p->body}
    	{/if}
    {/foreach}
    

    5) Добавляем в админку возможность выбора родительской страницы simpla/design/html/page.tpl

    <li><label class=property>Родительская страница</label>	
    	<select name="parent_id">
    		<option value="0">Не выбрана</option>
    		{foreach $pages as $p}
    			{if $page->id != $p->id && $p->parent_id == 0}
    				<option value='{$p->id}' {if $p->id == $page->parent_id}selected{/if}>{$p->header|escape}</option>
    			{/if}
    		{/foreach}
    	</select>	
    </li>
    

    6) Делаем красивый вывод страниц и подстраниц в списке страниц simpla/design/html/pages.tpl . После 

    <div id="list">		
    {foreach $pages as $page}
    

    добавляем для вывода только первого уровня страниц

    {if $page->parent_id == 0}
    

    в конце добавляем вывод подстраниц перед

    {/foreach}
    </div>
    

    вставляем

    {foreach $pages as $subpage}
    {if $subpage->parent_id == $page->id}
    <div class="{if !$subpage->visible}invisible{/if} row">
    <input type="hidden" name="positions[{$subpage->id}]" value="{$subpage->position}">
    <div class="move cell"><div class="move_zone"></div></div>
    <div class="checkbox cell">
    <input type="checkbox" name="check[]" value="{$subpage->id}" />				
    </div>
    <div class="name cell">
    ↳<a href="{url module=PageAdmin id=$subpage->id return=$smarty.server.REQUEST_URI}">{$subpage->header|escape}</a>
    </div>
    <div class="icons cell">
    <a class="preview" title="Предпросмотр в новом окне" href="../{$subpage->url}" target="_blank"></a>
    <a class="enable" title="Активна" href="#"></a>
    <a class="delete" title="Удалить" href="#"></a>
    </div>
    <div class="clear"></div>
    </div>
    {/if}
    {/foreach}
    {/if}
    

    7) Добавляем сохранения данных выбранного родителя в simpla/PageAdmin.php

    //после
    $page->id = $this->request->post('id', 'integer');
    //вставляем строку
    $page->parent_id = $this->request->post('parent_id', 'integer');
    
    //а так же после
    
    $this->design->assign('menus', $menus);
     
    // Добавляем подстраницы
    $menu_id = $this->request->get('menu_id', 'integer'); 
    $pages = $this->pages->get_pages(array('menu_id'=>$menu_id));
    $this->design->assign('pages', $pages);

    8) так же нужно запретить показ подстраниц по прямым ссылкам view/PageView.php

    //заменяем это
    // Отображать скрытые страницы только админу
    if(empty($page) || (!$page->visible && empty($_SESSION['admin'])))
    
    // на это
    // Отображать скрытые страницы только админу
    if(empty($page) || $page->parent_id != 0  || (!$page->visible && empty($_SESSION['admin'])))
    

    9) последнее... убираем подстраницы из sitemap.php

     // Страницы
     foreach($simpla->pages->get_pages() as $p)
     {
    	//заменяем это
    	if($p->visible && $p->menu_id == 1)
    	//на это
    	if($p->visible && $p->menu_id == 1 && $p->parent_id == 0)
     	{
     		$url = $simpla->config->root_url.'/'.esc($p->url);
     		print "\t<url>"."\n";

     

    Я не программист, сделал как видел код, потому прошу по косякам давать рекомендации в стиле "что поменять, и почему".

    Это решение для моих нужд, и если кому будет полезно, рад был помочь.

  2. Сделал! Расширил симплу -  сделал под страницы (parent_id)

     

    Страницы

    https://yadi.sk/i/4jusZLAV3HJVrS

     

    Страница

    https://yadi.sk/i/wTErH-6z3HJVu8

     

    1 В сайтмап не выводит подстраницы
    2 Автоматически сортирует в списке страниц под родителя + визуально показывает

    3 При прямом переходе на внутреннюю выдает "страница не найдена"

     

    Я подозреваю что нахардкодил где то, потому выложу инструкцию чуть позже.

    Хочу еще в списке страниц сделать фильтр по родительским страницам.

  3. Добрый день!

     

    Возникла задача: сделать длинные кастомные страницы аля "разделы". Проблема в том что структура этих страниц по типу "лендосов" длинный ковер из разных блоков. Так вот редактировать во одном окне редактора всю страницу очень не удобно. Хотелось бы как то разделить их по блочно.
    Например добавил блок "о компании" потом "партнеры" и так далее, а вывод идет на одной странице.

     

    Подскажите как логичней это выстроить?

  4.  

    Чтобы исправить эту ошибку нужно в файле view/View.php на 145-й строке найти код:

    $result->key   = $params['key']; // ключ
    
    и перед ним добавить:
    $result = new stdClass();
    
    В итоге должен получится такой код:
    $result = new stdClass();
    $result->key   = $params['key']; // ключ
    

    нужно каждый раз перезагружать страницу

  5. чуток разобрался с jQuery

    function changeColor(coel){
        var color = coel.val();
        var size_sel = coel.parent().parent().parent().find('.size_select');
        var size_datsel = coel.parent().parent().parent().find('.size_data_select');
        size_sel.html('');
        size_datsel.find('option').each(function() {
                if($(this).attr('color') == color) {   
                    $(this).clone().appendTo(size_sel);
                }
        });
        size_sel.find('option:first').attr('selected', 'selected');
        size_sel.val(size_sel.find('option:first').val());
        
        changeSize(size_sel);
    
    }
    function changeSize(el){
        option = el.find("option:selected");
        
        el.parent().parent().parent().find('.compare_price').text(option.attr('compare_price'));   
        el.parent().parent().parent().find('.original_price').text(option.attr('price'));   
    }
    function initAll(initel){
        var color = initel.parent().parent().parent().find('.color_select').val();
        var size_sel = initel.siblings('.size_select');
        initel.find('option').each(function() {
            if(color) {
                if($(this).attr('color') == color) {   
                    $(this).clone().appendTo(size_sel);
                }
            }
            else
            {
                $(this).clone().appendTo(size_sel);
            } 
              
        });
        size_sel.find('option:first').attr('selected', 'selected');
    }
    $(function() {
        $('.color_select').change(function(){ changeColor($(this)); });
        $('.size_select').change(function(){ changeSize($(this)); });
        $('.size_data_select').each(function() {
            initAll($(this));   
        });
        //changeColor();
    });
    
  6. Приветствую всех.
    Столкнулся мой клиент с такой ситуацией.
    Был у него сайт, который был проиндексирован и по некоторым запросам был в ТОПе... И вот обратился он ко мне с доработкой функционала и обновлением дизайна. После чего он решил, пере структурировать иерархию категорий на сайте. Ему так же было не приятен тот факт, что переименовка категорий сопровождалась перегенерацией УРЛов
     
    Сделал ему такое простенькое решение, может кому пригодится.

    Все в одном файле  /simpla/design/htm/product.tpl


    1 Добавляем кнопочку генерировать

    <li><label class=property>Адрес</label><div class="page_url">/catalog/</div><input name="url" class="page_url" type="text" value="{$category->url|escape}" /></li>
    
    заменяем на 
    
    <li><label class=property>Адрес <a href="#" id="genrate">генерировать</a></label><div class="page_url">/catalog/</div><input name="url" class="page_url" type="text" value="{$category->url|escape}" /></li>
    

    2 Добавляем функцию при клике на ту самую кнопочку

    $('input[name="url"]').change(function() { url_touched = true; });
    $('input[name="name"]').keyup(function() { set_meta(); });
    
    добавляем что бы получилось так:
    
    $('input[name="url"]').change(function() { url_touched = true; });
    $('input[name="name"]').keyup(function() { set_meta(); });
    $('#genrate').click(function(){$('input[name="url"]').val(generate_url())});
    

    3 Отключаем автогенератор для нашего поля

    function set_meta()
    {
    	if(!meta_title_touched)
    		$('input[name="meta_title"]').val(generate_meta_title());
    	if(!meta_keywords_touched)
    		$('input[name="meta_keywords"]').val(generate_meta_keywords());
    	if(!meta_description_touched)
    		$('textarea[name="meta_description"]').val(generate_meta_description());
    	if(!url_touched) 
    		$('input[name="url"]').val(generate_url());
    }
    
    заменяем
    
    function set_meta()
    {
    	if(!meta_title_touched)
    		$('input[name="meta_title"]').val(generate_meta_title());
    	if(!meta_keywords_touched)
    		$('input[name="meta_keywords"]').val(generate_meta_keywords());
    	if(!meta_description_touched)
    		$('textarea[name="meta_description"]').val(generate_meta_description());
    	//if(!url_touched) 
    	//	$('input[name="url"]').val(generate_url());
    }
×
×
  • Создать...