JavaScript в OSClass для отображения подкатегории после недопустимого родительского в Firefox - PullRequest
0 голосов
/ 09 января 2012

Я использую OSClass для создания сайта, который будет содержать несколько объявлений. К сожалению, некоторые сценарии плохо работают с Firefox / IE, поэтому мне нужно отследить эти ошибки.

Сценарий должен быть таким:

  1. Вы выбираете категорию для своего объявления
  2. Когда вы выбрали категорию, скрипт проверяет наличие подкатегорий и добавляет еще одно поле, в котором вы выбираете свою подкатегорию.

Вот файл .js:

var is_loading = true ;

function fill_subcategory_select ( id ) {
var category    = $("select.category") ;
var subcategory = $("select.subcategory") ;

// reset subcategory select
subcategory.html("") ;

console.log(twitter_theme.categories["id_" + id]) ;
// check that the category has subcategories
if( typeof twitter_theme.categories["id_" + id] === "undefined" ) {
    console.log("[fill_subcategory_select] hide subcategory") ;
    subcategory.append( $("<option>").attr('value', id) ) ;
    subcategory.css("display", "none") ;
    $("select.subcategory").trigger('change') ;
    return true;
}

subcategory.html()
subcategory.append( $("<option>").attr('value', id).html(twitter_theme.text_select_subcategory) ) ;
$.each(twitter_theme.categories["id_" + id], function(key, value) {
    console.log("[fill_subcategory_select] subcategory { id: " + value.id + ", slug: " + value.slug + ", name: " + value.name + " }") ;
    subcategory.append( $("<option>").attr('value', value.id).html(value.name) ) ;
}) ;
subcategory.css("display", "") ;
return true;
}

А вот из фактической формы:

<script type="text/javascript">
        twitter_theme.text_select_subcategory = "<?php _e('Select a subcategory...', 'twitter_bootstrap') ; ?>" ;
        twitter_theme.category_selected_id    = "<?php echo item_selected_category_id() ; ?>" ;
        twitter_theme.subcategory_selected_id = "<?php echo item_selected_subcategory_id() ; ?>" ;
</script>

<!-- category input -->
<div class="clearfix">
<label><?php _e('Category', 'twitter_bootstrap') ; ?></label>
<div class="input">
<?php item_category_select( __('Select a category', 'twitter_bootstrap') ) ; ?>
</div>
</div>
<!-- category input end -->

Что происходит в Firefox, так это то, что когда вы выбираете категорию, список подкатегорий вообще не отображается, что разрушает функциональность формы регистра, поскольку выдает сообщение об ошибке: «Недопустимая категория».

1 Ответ

2 голосов
/ 18 января 2012

Наконец-то я нашел проблему.Проблема была в item_category_select_js() функции.Вы можете найти эту функцию в ./twitter_bootstrap/functions.php.Вот новый код:

function item_category_select_js() {
    ?>
    <script type="text/javascript">
        twitter_theme.categories = {} ;
    <?php
    $aCategories = osc_get_categories() ;
    foreach($aCategories as $category) {
        if( is_array($category['categories']) && (count($category['categories']) > 0) ) {
            echo 'twitter_theme.categories.id_' . $category['pk_i_id'] . ' = {' . PHP_EOL ;
            for($i = 0; $i < count($category['categories']); $i++) {
                echo $category['categories'][$i]['pk_i_id'] . ': { id: ' . $category['categories'][$i]['pk_i_id'] . ', slug: "' . addslashes($category['categories'][$i]['s_slug']) . '", name: "' . addslashes($category['categories'][$i]['s_name']) . '"' ;
                if( $i == (count($category['categories']) - 1) ) {
                    echo '}' . PHP_EOL ;
                } else {
                    echo '} ,' . PHP_EOL ;
                }
            }
            echo '} ;' ;
        } else {
            echo 'twitter_theme.categories.' . $category['s_slug'] . ' = { } ;' . PHP_EOL  ;
        }
    }
    ?>
    </script>
    <?php
}

Он был исправлен в последней версии (1.2.1).Вы можете скачать здесь: https://sourceforge.net/projects/osclass/files/Themes/twitter/

...