Ejemplo n.º 1
0
/**
 * Get name for seo object
 *
 * @param string $object_type object type of seo object
 * @param int $object_id object id of seo object
 * @param string $dispatch  dispatch of seo object
 * @param int $company_id Company identifier
 * @param string $lang_code language code
 * @return string name for seo object
 */
function fn_seo_get_name($object_type, $object_id = 0, $dispatch = '', $company_id = null, $lang_code = CART_LANGUAGE)
{
    /**
     * Get name for seo object (running before fn_seo_get_name() function)
     *
     * @param string $object_type
     * @param int    $object_id
     * @param string $dispatch
     * @param int    $company_id
     * @param string $lang_code   Two-letter language code (e.g. 'en', 'ru', etc.)
     */
    fn_set_hook('seo_get_name_pre', $object_type, $object_id, $dispatch, $company_id, $lang_code);
    $company_id_condition = '';
    if (fn_allowed_for('ULTIMATE')) {
        if ($company_id !== null) {
            $company_id_condition = fn_get_seo_company_condition("?:seo_names.company_id", $object_type, $company_id);
        } else {
            $company_id_condition = fn_get_seo_company_condition('?:seo_names.company_id', $object_type);
            if (Registry::get('runtime.company_id')) {
                $company_id = Registry::get('runtime.company_id');
            }
        }
    }
    if ($company_id == null) {
        $company_id = '';
    }
    $lang_code = fn_get_corrected_seo_lang_code($lang_code);
    $_object_id = !empty($object_id) ? $object_id : $dispatch;
    $name = SeoCache::get('name', $object_type, $_object_id, $company_id, $lang_code);
    if (is_null($name)) {
        $where_params = array('object_id' => $object_id, 'type' => $object_type, 'dispatch' => $dispatch, 'lang_code' => $lang_code);
        $seo_data = db_get_row("SELECT name, path FROM ?:seo_names WHERE ?w ?p", $where_params, $company_id_condition);
        if (empty($seo_data)) {
            if ($object_type == 's') {
                $alt_name = db_get_field("SELECT name FROM ?:seo_names WHERE object_id = ?i AND type = ?s AND dispatch = ?s ?p", $object_id, $object_type, $dispatch, $company_id_condition);
                if (!empty($alt_name)) {
                    $name = fn_create_seo_name($object_id, $object_type, str_replace('.', '-', $dispatch), 0, $dispatch, $company_id, $lang_code);
                }
            } else {
                $object_name = fn_seo_get_default_object_name($object_id, $object_type, $lang_code);
                if (!empty($object_name)) {
                    $name = fn_create_seo_name($object_id, $object_type, $object_name, 0, $dispatch, $company_id, $lang_code);
                }
            }
        } else {
            $name = $seo_data['name'];
        }
        $name = !empty($name) ? $name : '';
        if (!empty($seo_data)) {
            $cache_data = array('seo_name' => $seo_data['name'], 'seo_path' => $seo_data['path']);
        } else {
            $cache_data = array('seo_name' => $name);
        }
        SeoCache::set($object_type, $_object_id, $cache_data, $company_id, $lang_code);
    }
    /**
     * Get name for seo object (running after fn_seo_get_name() function)
     *
     * @param string $name
     * @param string $object_type
     * @param int    $object_id
     * @param string $dispatch
     * @param int    $company_id
     * @param string $lang_code   Two-letter language code (e.g. 'en', 'ru', etc.)
     */
    fn_set_hook('seo_get_name_post', $name, $object_type, $object_id, $dispatch, $company_id, $lang_code);
    return $name;
}