Склонение в закрытом профиле пользователя

InstantCMS 2.X

как правильно реализовать?

#1 29 июля 2022 в 16:53

Подскажите кто знает как реализовать склонение он | она
В этом файле templates/мой_шаблон/controllers/users/profile_closed.tpl.php

  1. <div id="right_column" class="col-md-8 mt-3 mt-md-0">
  2. <div id="information" class="card card-body content_item">
  3. <div class="fieldset">
  4. <div class="fieldset_title*">
  5. <h3 class="h4 text-info"><?php html_svg_icon( 'solid', 'bong', 32 ); ?>
  6. <?php echo html( $profile[ 'nickname' ] ); ?>
  7. <?php echo LANG_USERS_PROFILE_IS_HIDDEN; ?>
  8. </h3>
  9. </div>
  10. <?php foreach ( $sys_fields as $name => $field ) { ?>
  11. <div class="field ft_string f_<?php echo $name; ?>">
  12. <div class="text-secondary title title_left">
  13. <?php echo $field[ 'title' ]; ?>:
  14. </div>
  15. <div class="value">
  16. <?php echo $field[ 'text' ]; ?>
  17. </div>
  18. </div>
  19. <?php } ?>
  20. </div>
  21. </div>
  22. </div>

Sebastian — мужчина.
Merlin — женщина.

Тоесть гость смотрит закрытый профиль пользователя и видит Merlin закрыла информацию о своем профиле.
Переходит в профиль Sebastian и видит — Sebastian закрыл информацию о своем профиле.

Я искал и нашел вот такую функцию: (для примера)

  1. <?php echo html_spellcount( $item[ 'photos_count' ], LANG_PHOTOS_PHOTO_SPELLCOUNT ); ?>

Возвращает число с числительным в нужном склонении.
Я понимаю понятно что тут число...

У меня есть поле.
Системное имя — sex.
Название поля — Пол.
Тип поля — Список.
Предустановленные значения -:
Мужчина
Женщина
(не указан)

Еще две константы:

  1. define( 'LANG_USERS_PROFILE_IS_HIDDEN', 'закрыл информацию о своем профиле' );
  2. define( 'LANG_USERS_PROFILE_IS_HIDDEN_NAME','закрыл|закрыла' );


Пытаюсь привести к такому виду:
Изображение

Покажите пожалуйста пример реализации.

Или может проще через переменные и условие if ?

#2 29 июля 2022 в 17:05

У списка есть id каждого элемента, вот по нему можно и писать условие if. Я где то это уже делал, но нет времени пока, Убегать надо

#3 29 июля 2022 в 19:40

Или может проще через переменные и условие if ?

Tim Trella

Я бы создал еще одно поле, gender — где будет два значения (мужчина или женщина). Ну и прописать это в вашем шаблоне, как то так:

  1. <?php if ($profile['gender'] == 1) { 'Склонение по мужскому роду'; } else { 'Склонение по женскому роду'; } ?>

Это так, навскидку. Если бы у вас было число — то тут все просто — для этого есть системные методы. А вот склонение для имен — вопрос непонятный. Имен может быть миллион, всех их не перечислишь, да и Саша может быть как и женским, так и мужским именем.

#4 30 июля 2022 в 11:37

Хорошо. Всем спасибо.
Вот решение для будующих поколений🕐

***0-_-0***
Поле.
Системное имя — sex.
Название поля — Пол.
Тип поля — Список.
Предустановленные значения -:

1 | Мужчина
2 | Женщина
3 | (пол не указан)

В филдсетах Формат поля — Поле должно быть заполнено — чекбокс не проставлен! Так как у меня нет требований к пользователю указывать выбор пола при регистрации.

Дефайны в system/languages/ru/controllers/users/users.php

  1. define( 'LANG_USERS_PROFILE_IS_HIDDEN', 'информацию о своем профиле' );
  2. define( 'LANG_USERS_PROFILE_IS_HIDDEN_NAME_MEN','закрыл' );
  3. define( 'LANG_USERS_PROFILE_IS_HIDDEN_NAME_WOMEN','закрыла' );
  4. define( 'LANG_USERS_PROFILE_IS_HIDDEN_NAME_SEX','(скрыл/а свой пол) и' );

Код в шаблоне templates/apphapay/controllers/users/profile_closed.tpl.php

  1. <div id="right_column" class="col-md-8 mt-3 mt-md-0">
  2. <div id="information" class="card card-body content_item">
  3. <div class="fieldset">
  4. <div class="fieldset_title*">
  5. <h3 class="h4 text-info"><?php html_svg_icon( 'solid', 'bong', 32 ); ?>
  6. <?php echo html( $profile[ 'nickname' ] ); ?>
  7. <?php
  8. if ( $profile[ 'sex' ] == 1 ) {
  9. echo LANG_USERS_PROFILE_IS_HIDDEN_NAME_MEN;
  10. }
  11. elseif ( $profile[ 'sex' ] == 2 ) {
  12. echo LANG_USERS_PROFILE_IS_HIDDEN_NAME_WOMEN;
  13. }
  14. else {
  15. echo LANG_USERS_PROFILE_IS_HIDDEN_NAME_SEX;
  16. }
  17. ?>
  18. <?php echo LANG_USERS_PROFILE_IS_HIDDEN; ?>
  19. </h3>
  20. </div>
  21. <?php foreach ( $sys_fields as $name => $field ) { ?>
  22. <div class="field ft_string f_<?php echo $name; ?>">
  23. <div class="text-secondary title title_left">
  24. <?php echo $field[ 'title' ]; ?>:
  25. </div>
  26. <div class="value">
  27. <?php echo $field[ 'text' ]; ?>
  28. </div>
  29. </div>
  30. <?php } ?>
  31. </div>
  32. </div>
  33. </div>

Результат:

Если синьор

Изображение

Если мадам
Изображение

Если не указано (т.е. значения нет или выбрано (пол не указан))

Изображение

Добавлено спустя 2 минуты

Если есть другие идеи… пишите.
Это решение простое и работает.

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.