public function getItemSlug($ctype, $item, $fields, $check_slug = true) { $pattern = trim($ctype['url_pattern'], '/'); preg_match_all('/{([a-zA-Z0-9\\_]+)}/i', $pattern, $matches); if (!$matches) { return lang_slug($item['id']); } list($tags, $names) = $matches; if (in_array('category', $names)) { $category = $this->getCategory($ctype['name'], $item['category_id']); $pattern = str_replace('{category}', $category['slug'], $pattern); unset($names[array_search('category', $names)]); } $pattern = trim($pattern, '/'); foreach ($names as $idx => $field_name) { if (!empty($item[$field_name])) { $value = str_replace('/', '', $item[$field_name]); if (isset($fields[$field_name])) { $value = $fields[$field_name]['handler']->getStringValue($value); $value = trim($value, '/'); } $pattern = str_replace($tags[$idx], $value, $pattern); } } $slug = lang_slug($pattern); if (!$check_slug) { return $slug; } if ($this->filterNotEqual('id', $item['id'])->filterEqual('slug', $slug)->getFieldFiltered($this->table_prefix . $ctype['name'], 'id')) { $slug .= uniqid(); } return $slug; }
/** * Очищает имя файла от специальных символов * * @param string $filename * @return string */ function files_sanitize_name($filename) { $path_parts = pathinfo($filename); $filename = lang_slug($path_parts['filename']) . '.' . $path_parts['extension']; $filename = mb_strtolower($filename); $filename = preg_replace(array('/[\\&]/', '/[\\@]/', '/[\\#]/'), array('-and-', '-at-', '-number-'), $filename); $filename = preg_replace('/[^(\\x20-\\x7F)]*/', '', $filename); $filename = str_replace(' ', '-', $filename); $filename = str_replace('\'', '', $filename); $filename = preg_replace('/[^\\w\\-\\.]+/', '', $filename); $filename = preg_replace('/[\\-]+/', '-', $filename); return $filename; }
public function getCategorySLUG($category) { $slug = ''; foreach ($category['path'] as $c) { if ($c['id'] == 1) { continue; } if ($slug) { $slug .= '/'; } $slug .= lang_slug(empty($c['slug_key']) ? str_replace('/', '', $c['title']) : $c['slug_key']); } return $slug; }
public function getItemSlug($ctype, $item, $fields) { $pattern = trim($ctype['url_pattern'], '/'); preg_match_all('/{([a-zA-Z0-9\\_]+)}/i', $pattern, $matches); if (!$matches) { return lang_slug($item['id']); } list($tags, $names) = $matches; if (in_array('category', $names)) { $category = $this->getCategory($ctype['name'], $item['category_id']); $pattern = str_replace('{category}', $category['slug'], $pattern); unset($names[array_search('category', $names)]); } $pattern = trim($pattern, '/'); foreach ($names as $idx => $field_name) { if (!empty($item[$field_name])) { $value = $item[$field_name]; if (isset($fields[$field_name])) { $value = $fields[$field_name]['handler']->getStringValue($value); $value = trim($value, '/'); } $pattern = str_replace($tags[$idx], $value, $pattern); } } return lang_slug($pattern); }
public function run() { // Получаем название типа контента и сам тип $ctype_name = $this->request->get('ctype_name', ''); $ctype = $this->model->getContentTypeByName($ctype_name); if (!$ctype) { cmsCore::error404(); } // проверяем поддержку категорий if (!$ctype['is_cats']) { cmsCore::error404(); } // проверяем наличие доступа if (!cmsUser::isAllowed($ctype['name'], 'edit_cat')) { cmsCore::error404(); } $id = $this->request->get('id', 0); if (!$id) { cmsCore::error404(); } $category = $this->model->getCategory($ctype['name'], $id); $form = $this->getCategoryForm($ctype, 'edit'); list($form, $category) = cmsEventsManager::hook("content_{$ctype['name']}_cat_form", array($form, $category)); $back_url = $this->request->get('back', ''); // Форма отправлена? $is_submitted = $this->request->has('submit'); if ($is_submitted) { // Парсим форму и получаем поля записи $category = $form->parse($this->request, $is_submitted); // Проверям правильность заполнения $errors = $form->validate($this, $category); if (!$errors) { // Обнуляем ручной SLUG, ключевые слова и описание // если они не разрешены для ручного ввода if ($ctype['options']['is_cats_auto_url']) { $category['slug_key'] = null; } if (!$ctype['options']['is_cats_keys']) { $category['seo_keys'] = null; } if (!$ctype['options']['is_cats_desc']) { $category['seo_desc'] = null; } // Добавляем категорию и редиректим на ее просмотр $category = $this->model->updateCategory($ctype_name, $id, $category); if ($back_url) { $this->redirect($back_url); } else { if ($ctype['options']['list_on']) { $this->redirectTo($ctype_name, $category['slug']); } else { $this->redirectToHome(); } } } if ($errors) { cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error'); } } // Если включен ручной ввод SLUG и ранее он не был введен, то генерируем // его значение по-умолчанию из заголовка if (!$ctype['options']['is_cats_auto_url'] && empty($category['slug_key'])) { $category['slug_key'] = lang_slug($category['title']); } return cmsTemplate::getInstance()->render('category_form', array('do' => 'edit', 'ctype' => $ctype, 'category' => $category, 'form' => $form, 'back_url' => $back_url, 'errors' => isset($errors) ? $errors : false)); }
public function getPhotoSlug($item, $check_slug = true) { $url_pattern = empty($this->config['url_pattern']) ? '{id}-{title}' : $this->config['url_pattern']; $slug_len = 100; $matches = array(); $pattern = trim($url_pattern, '/'); preg_match_all('/{([a-z0-9\\_]+)}/i', $pattern, $matches); if (!$matches) { return lang_slug($item['id']); } list($tags, $names) = $matches; foreach ($names as $idx => $field_name) { if (!empty($item[$field_name])) { $value = str_replace('/', '', $item[$field_name]); if ($field_name == 'type' && !empty($this->config['types'])) { $value = $this->config['types'][$value]; $value = trim($value, '/'); } $pattern = str_replace($tags[$idx], $value, $pattern); } } $slug = lang_slug($pattern); $slug = mb_substr($slug, 0, $slug_len); if (!$check_slug) { return $slug; } if ($this->filterNotEqual('id', $item['id'])->filterEqual('slug', $slug)->getFieldFiltered('photos', 'id')) { $id_len = strlen((string) $item['id']) + 1; $slug = mb_substr($slug, 0, $slug_len - $id_len); $slug .= '-' . $item['id']; } return $slug; }
public function getTaxonomySlug($name) { $name = trim($name); return lang_slug($name); }